1.当用了裸指针给智能指针赋值之后,就不应该再使用裸指针了。
2.不能用一个裸指针同时给多个智能指针初始化,这会使得每一个强引用计数都是1.
3.通过get获得的裸指针不能再绑到其他的智能指针上,道理同2
4.若一个智能指针已经指在类对象上了,不能通过类对象的this指针返回一个智能指针,道理同2.需要将类继承自enable_shared_from_this<>.并使用shared_from_this来返回绑定到此对象的智能指针
class A:public enable_shared_from_this<A>
{
public:
A()
{
cout << "构造函数" << endl;
}
A(const A& temp)
{
cout << "拷贝构造函数" << endl;
}
~A()
{
cout << "析构函数" << endl;
}
shared_ptr<A> getself()
{
return shared_from_this();
}
};
5.若存在两个类,其中A类中有指向B类的智能指针,B类中有指向A类的智能指针。先定义两个智能指针分别指向两个类,再将每个对象中的指针指向另一个对象。此时如果两个指针若被析构或者指向其他对象,会导致内存泄漏。
class B;
class A
{
public:
shared_ptr<B> m_a;
};
class B
{
public:
shared_ptr<A> m_b;
};
int main()
{
shared_ptr<A> p1(new A());
shared_ptr<B> p2(new B());
p1->m_a = p2;
p2->m_b = p1;
}
解决办法:将两个类中的任意一个类的shared_ptr更改为weak_ptr