除了智能指针互相指向引发内存泄露外,自身也有可能造成错误
1,自己指向自己
2,A指向自己,在自己的成员函数中,让A指向别人从而使自己被析构,但是自己还在成员函数中.
class KinT;
vector<shared_ptr<KinT>> Top;
class KinT
{
public:
KinT()
{
cout << "KinT Start" << endl;
}
~KinT()
{
cout << "KinT End" << endl;
a = 0;
}
void doIt()
{
a = 5;
cout << "before a is : "<< a << endl;
Top.clear();
cout << "not over a is :" << a << endl;
}
shared_ptr<KinT> p;
private:
int a;
};
void Test()
{
shared_ptr<KinT> p = make_shared<KinT>();
p->p = p;
}
int _tmain(int argc, _TCHAR* argv[])
{
Test();
Top.push_back( make_shared<KinT>() );
Top[0]->doIt();
return 0;
}