《BOOST程序库完全开发指南》 第03章 内存管理
auto_ptr、scoped_ptr 与 scoped_array:
#include <iostream> #include <boost/scoped_ptr.hpp> #include <boost/scoped_array.hpp> #include <boost/shared_ptr.hpp> #include <boost/make_shared.hpp> class User { public: User(){} public: int id; }; int main() { std::auto_ptr<int> ap(new int(3)); std::cout<<*ap<<std::endl; std::auto_ptr<int> ap2 = ap; //ok,同时ap失去控制权 std::cout<<ap.get()<<std::endl; //0 boost::scoped_ptr<int> sp(new int(3)); //boost::scoped_ptr<int> sp2 = sp; //error,不能转移所有权 std::cout<<*sp<<std::endl; //不推荐使用scoped_array,建议使用vector //scoped_array不能动态增长,没有迭代器支持,不能搭配stl算法。 boost::scoped_array<int> sa(new int[100]); sa[1] = 2; std::cout<<sa[2]<<std::endl; std::cout<<sa[1]<<std::endl; //使用 boost::make_shared 可以包装 new 表达式,解决代码不对称性。 boost::shared_ptr<User> user_ptr = boost::make_shared<User>(); user_ptr->id = 3; std::cout<<user_ptr->id<<std::endl; std::cout<<user_ptr.get()->id<<std::endl; //get()方法可以获取原指针 }