问题补充:最后那个 } 多打了 调用sqr_it前,实参对象obj的数据成员i=10 在函数 sqr_it内,形参对象ob的数据成员i=100 调用sqr_it后,实参对象obj
第一段程序,没有用 &,是用的是值传递。
第二段程序,如果使用了&,那就是引用传递;如果没有,那就是值传递。
引用传递的话,主函数中的 p 对象和 display 函数中的 x 对象,其实是同一个对象。当程序离开 display 的时候,x 不会被析构。当主函数结束时, p 被析构。
如果使用值传递,程序出错。虽然 p 和 x 不是同一个对象,但是 p 中的 name 和 x 中的 name,这两个指针都指向同一块内存。当程序离开 display 函数的时候,对 x 对象进行析构,把 name 指向的内存回收了。当主函数树结束时,要对 p 对象进行析构,在析构函数中调用 delete name; 试图回收内存,由于name 指向的内存已经回收了,所以程序出错。
另外,people类的析构函数中应该写 delete []name; 而不是 delete name;
http://www.baidu.com/s?bs=%B0%C1%CA%D3%C5%A3%C5%A3+%C9%E8%D6%C3%B1%A3%B4%E6&f=8&wd=%D6%B8%D5%EB%D3%EB%D2%FD%D3%C3%B5%C4%C7%F8%B1%F0&inputT=5172