被拷贝构造函数摆了一道
Posted on 八月 16rd, 2007 由 admin
class a {
public
~a() {
//delete something
}
foo();
...
}
class b {
char* p;
public
~b() {
//delete something
}
foo();
...
}
结果写了一个表达式
(boolvar ? obja : objb).foo()
然后调试的时候老出错,分析发现,这个地方用默认拷贝构造函数生成了一个obja或objb的副本,副本析构的时候把本不应该delete的东西给delete了。
教训:不用拷贝构造函数的时候,尽量将之用private屏蔽,同样的还有operator=
推荐阅读


讨论区