首页 > 编程语言 > 详细

C++11之智能指针unique_ptr

时间:2015-03-23 19:52:06      阅读:244      评论:0      收藏:0      [点我收藏+]
class UNP
{
public:
    UNP(int ii)
    {
        i = ii;
        cout<<"constructor:"<<i<<endl;
    }
    ~UNP()
    {
        cout<<"destructor:"<<i<<endl;
    }
private:
    int i;
};
std::unique_ptr<UNP> uniptr()
{
   //unique_ptr构造
    unique_ptr<int> u_i10;
    u_i10.reset(new int(10)); //方法1:先设空,再reset

    unique_ptr<int> u_i11(new int(11)); //方法2:直接赋值构造

    UNP* k = new UNP(2);
    std::unique_ptr<UNP> u_i2(k); //方法3:普通指针构造,直接管理k

    unique_ptr<UNP> u_i1(new UNP(1));
    u_i1.reset(u_i2.release()); //方法4,用另一个unique_ptr构造,u_i原来指向的对象UNP(1)现在会析构,u_i1帮u_i2管理,
                                          // u_i2变成空,  注意u_i2.release()会使u_i2变成空。

    unique_ptr<UNP> u_i3(new UNP(3));
    u_i3 = std::move(u_i1); //方法5,所有权转移(通过移动语义),同方法4,UNP3会析构,u_i3帮u_i1管理,u_i1变成空
    return u_i3;

//    int *p_i = u_i2.release(); //释放所有权,u_i2变成空
//    unique_ptr<string> u_s(new string("abc"));
//    unique_ptr<string> u_s2 = std::move(u_s); //所有权转移(通过移动语义),u_s所有权转移后,变成“空指针”
//    u_s2=nullptr;//显式销毁所指对象,同时智能指针变为空指针。与u_s2.reset()等价
}

int main()
{
    unique_ptr<UNP> a = std::move(uniptr());
    a = nullptr; //UNP(2)已析构,不需等到main完结,显式销毁所指对象,同时智能指针变为空指针。与a.reset(),a.release()等价
    return 0;
}

 

C++11之智能指针unique_ptr

原文:http://mingtangduyao.blog.51cto.com/4876371/1623417

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!