C++重载运算符问题。
书上有句话:“=”运算符可以进行类与类之间的赋值,但如果数据成员中含有指向动态类存的指针成员时,在复制此成员时就可能出现危险。
这句话不理解,,,,为什么可能出现危险?
[解决办法]
因为对象进行'='赋值时仅仅是把对象自身复制一份进目标里,而对象内部那些指针所指向的东西不会一起被复制。这就可能导致两个对象里的指针都只着同样的一个动态存储区,而当你销毁其中一个对象时,它的析构函数可能就会把该动态存储区给delete了,而另一个对象此时毫不知情。然后.....那个区域就可能被再次分配给另一个需求......当前面那个无知的对象来取数据时,可能就会发现里面的东西乱七八糟,都不知道是什么了。
[解决办法]
比如两个对象: a,b;
执行
a = b;
将导致a中的指针成员指向的是对象b中的指针成员指向的内存,这样使用其他对象的内存会出现问题,而且当对象b析构后,a中的指针就会悬挂。
[解决办法]
也可能发生:第一个对象把那块区域给改写了,而第二个对象则很委屈地对你说:“我真没改过那里面的内容啊!我比窦娥还冤!”