智能指针unique_ptr

unique_ptr通过指针占有并管理另一个对象(主要负责管理对象的销毁,或者说生命周期)。当unique_ptr被销毁时或者给unique_ptr赋值另一个对象的指针时,unique_ptr将删除原来管理的对象。unique_ptr可以管理单个对象,也可以管理动态分配的对象数组。unique_ptr类满足可移动构造以及可移动赋值,但是不满足可复制构造和可复制赋值的要求。

代码库:

https://gitee.com/gamestorm577/CppStd

创建unique_ptr

一般通过std::make_unique来创建一个unique_ptr。

例如创建一个管理单个类对象的unique_ptr:

struct MyStruct
{
    MyStruct()
    {
        printf("MyStruct1, {X: %d, Y: %d}\n", X, Y);
    }
    MyStruct(int x, int y)
        : X(x)
        , Y(y)
    {
        printf("MyStruct2, {X: %d, Y: %d}\n", X, Y);
    }
    int X = 0;
    int Y = 0;
};

std::cout << "construct a unique_ptr of single object: " << std::endl;
std::unique_ptr<MyStruct> ptr1 = std::make_unique<MyStruct>();

std::cout << "construct a unique_ptr of single object: " << std::endl;
std::unique_ptr<MyStruct> ptr2 = std::make_unique<MyStruct>(3, 5);

终端输出结果为:

construct a unique_ptr of single object: 
MyStruct1, {X: 0, Y: 0}
construct a unique_ptr of single object: 
MyStruct2, {X: 3, Y: 5}

也可以创建一个管理动态分配的对象数组的unique_ptr:

std::cout << "construct a unique_ptr of object array: " << std::endl;
std::unique_ptr<MyStruct[]> ptr3 = std::make_unique<MyStruct[]>(3);

终端输出结果为:

construct a unique_ptr of object array: 
MyStruct1, {X: 0, Y: 0}
MyStruct1, {X: 0, Y: 0}
MyStruct1, {X: 0, Y: 0}

对象生命周期管理

智能指针的主要功能是管理对象的生命周期。对于一个动态分配的对象,当我们不需要时,需要手动删除这个对象,这种手动管理的方式非常容易犯错。unique_ptr是一个栈上的变量,它的内存申请和回收都是系统自动完成的。通过unique_ptr来管理动态分配的对象的生命周期,当unique_ptr被销毁时,自动删除其占用的对象,这样更智能,不容易犯错。

例如,当unique_ptr离开作用域时,unique_ptr被销毁,unique_ptr管理的对象被自动删除:

struct MyStruct
{
    ~MyStruct()
    {
        printf("~MyStruc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucy_stone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值