《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()方法可以获取原指针

}

 

 

你可能感兴趣的:(boost)