boost::shared_ptr是可以共享所有权的指针。如果有多个shared_ptr共同管理同一个对象时,只有这些shared_ptr全部与该对象脱离关系之后,被管理的对象才会被释放。 shared_ptr的管理机制其实并不复杂,就是对所管理的对象进行了引用计数,当新增一个shared_ptr对该对象进行管理时,就将该对象的引用计数加一;减少一个shared_ptr对该对象进行管理时,就将该对象的引用计数减一,如果该对象的引用计数为0的时候,说明没有任何指针对其管理,才调用delete释放其所占的内存。范例代码如下所示:
#include#include #include class Class1{ public: Class1(){} Class1(std::string str) { this->m_str = str; } ~Class1(){} public: std::string m_str; }; void setStr(boost::shared_ptr sp3) { sp3->m_str = "广州知了软件有限公司"; std::cout << sp3.use_count() << std::endl;//3 std::cout << sp3->m_str << std::endl;//输出广州知了软件有限公司 } int _tmain(int argc, _TCHAR* argv[]) { boost::shared_ptr sp1(new Class1("test")); std::cout << sp1.use_count() << std::endl;//1 boost::shared_ptr sp2 = sp1; std::cout << sp2.use_count() << std::endl;//2 std::cout << sp1->m_str << std::endl; std::cout << sp2->m_str << std::endl; setStr(sp1); std::cout << sp1.use_count() << std::endl;//2 std::cout << sp1->m_str << std::endl;//输出广州知了软件有限公司 return 0; }
在sp1和sp2内部共享的都是同一块内存区域,作为参数传给sp3时,只是增加引用计数。内存还是一致的。



