1.复制构造函数没有用引用而是值或指针
class A
{
public:
A(const A a) { ... } //因为每次传入一个对象时,会调用这个对象的拷贝构造函数,造成无限循环
A(const A *a) { ... } //同上
A(const A &a) { ... }
~A() { if(p!=NULL) { delete p; p=NULL; } }
A* p;
};
2.析构函数无线循环
class A
{
public:
A() { p=this; }
~A() { if(p!=NULL) { delete p; p=NULL; } }
A* p;
};
不是构造的时候,是析构的时候,当析构的时候,p=this,delete p,即delete this,会再次调用析构函数,这是个无限递归调用。
原文:http://www.cnblogs.com/su-da/p/3629104.html