假设类A中有个数据成员s,并且s是利用new操作从堆中动态获得的存储空间,那么在执行以下操作:
A a;
a.setS(5);
A b;
b=a;
那么a和b中的成员s将会共享同一块存储空间。假设a中的s发生变化,那么b中的s也将会发生变化,更为严重 的是如果a和b中有一个对象销毁,s所占有的分配空间被释放的时候,会对另一个对象产生灾难性的影响。
解决办法:
1.写拷贝构造函数(复制初始化构造函数)。
格式:类名(const 类名&);
在拷贝构造函数中为s分配独立的堆空间。
2.对赋值运算符“=”进行重载。
道理是一样的,都是对s分配属于自己的存储空间。