首页 > 代码库 > boost::shared_ptr

boost::shared_ptr

1.boost库的shared_ptr智能指针在使用中遇到了一个需要注意的地方

 1 typedef boost::shared_ptr<A> APtr 2 class A 3 { 4 public: 5     void FunA() 6     { 7         m_pB->FunB1(APtr(this)); 8         m_pB->FunB2(this); 9     }10 11 private:12     B * m_pB;13 }14 15 class B16 {17     void FunB1(APtr pA);18     void FunB2(A * pA);19 }20 21 class Manager22 {23     vector<APtr> m_vecA;24 }

如果在FunA中调用FunB1的话,由于APtr(this)是一个临时变量,在调用后,智能指针内存会被释放,并且内部的引用计数为1,也会释放A的内存,在Manager中再次调用A时便会出现内存泄露。应该使用FunB2这种调用方法。

boost::shared_ptr