C++主动释放unique_ptr

C++11提供了智能指针unique_ptr,当离开作用域范围就会自动释放,但是有时我们希望可以主动释放unique_ptr指向的内存空间,如何做到呢?直接把nullptr赋值给智能指针就行了。


例子

下面是个简单的例子,

#include <iostream>
#include <memory>

class Test
{
public:
    Test() {}
    
    // 析构函数
    ~Test() 
    {
        std::cout << "123\n";
    }

};


int main(int, char**) 
{
    std::cout << "==>1\n";
    {  // 作用域开始
        std::unique_ptr<Test> ptr(new Test);
        std::cout << "==>2\n";
    }   // 作用域结束
    

    std::cout << "==>3\n";

    return 0;
}

main函数里使用花括号设置了一个作用域,当离开作用域,就会释放智能指针指向的内存空间,也就会调用Test的析构函数。

编译运行后打印如下,
在这里插入图片描述
“123”是在“==>2”和 “==>3”之间打印的。

修改代码,让智能指针主动释放,如下,

int main(int, char**) 
{
    std::cout << "==>1\n";
    {  // 作用域开始
        std::unique_ptr<Test> ptr(new Test);
        ptr = nullptr; // 主动释放
        std::cout << "==>2\n";
    }   // 作用域结束
    

    std::cout << "==>3\n";

    return 0;
}

最后打印如下,
在这里插入图片描述
可以看到是在打印“==>2”之前就释放了。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值