std::unique_ptr release的使用

在c++中,动态内存管理是通过new/delete 运算符来进行的。由于确保在正确的时间释放内存是很困难的,为了避免内存泄漏,更加容易,安全地使用动态内存,C++11标准库提供了两种智能指针类型来管理动态对象。只能指针的行为类似于常规指针,重要的区别是它负责自动释放所指的对象。

std::shared_ptr ,  允许多个指针指向同一个对象

std::unique_ptr, 独占所指向的对象

std::unique_ptr 是 c++11中用来取代 std::auto_ptr 指针的指针容器。 它不能与其他unique_ptr类型的指针对象共享所指对象的内存。这种所有权仅能够通过std::move函数来转移。unique_ptr是一个删除了拷贝构造函数、保留了移动构造函数的指针封装类型。

调用release 会切断unique_ptr 和它原来管理的对象的联系。release 返回的指针通常被用来初始化另一个智能指针或给另一个智能指针赋值。如果不用另一个智能指针来保存release返回的指针,程序就要负责资源的释放。

 

#include <iostream>
#include <memory>

int main() {

        std::unique_ptr<int> uptr(new int(10));  //绑定动态对象
        //std::unique_ptr<int> uptr2 = uptr;  //不能賦值
        //std::unique_ptr<int> uptr2(uptr);  //不能拷内
        std::unique_ptr<int> uptr2 = std::move(uptr); //轉換所有權

        if(uptr == nullptr)
            printf("uptr give up *int\n");


        int * p = uptr2.release(); //uptr2释放对指针的控制权,返回指针,并将uptr2置为空

        if(uptr2 == nullptr)
          printf("uptr2 give up *int\n");


        printf("%d\n", *p);
        delete p;

        return 0;
}

 

输出结果:

[daq@centos build]$ ./hello-exe/cmake-good 
uptr give up *int
uptr2 give up *int
10

 

 

原文链接: https://www.cnblogs.com/zengtx/p/11911853.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    std::unique_ptr release的使用

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/306274

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 上午3:56
下一篇 2023年2月16日 上午3:57

相关推荐