unique_ptr 智能指针详解

目录

std::unique_ptr:

unique_ptr独占所有权:

unique_ptr不要使用 delete 或 delete[]:

unique_ptr避免裸指针和 release 的滥用

unique_ptr自定义删除器


std::unique_ptr:

是 C++ 标准库中的一个智能指针类型,用于管理动态分配的资源,如堆上的对象。std::unique_ptr 拥有其所指向的资源的独占所有权,这意味着同一时间只能有一个 std::unique_ptr 指向该资源。如果需要转移 std::unique_ptr 的所有权,可以使用以下几种方式:

  1. 移动语义(Move Semantics): 通过移动构造函数和移动赋值操作符,你可以将一个 std::unique_ptr 的所有权转移到另一个。移动操作会使原来的指针变为 null,同时将所有权转移到新的指针上。这是一种高效的方式,因为它只涉及指针的重新指向,而不需要进行资源的拷贝或析构。

    std::unique_ptr<int> ptr1 = std::make_unique<int>(42); std::unique_ptr<int> ptr2 = std::move(ptr1); // 转移所有权

  2. 使用 release 函数: std::unique_ptr 提供了 release 成员函数,它将指针从 std::unique_ptr 中释放,但并不会销毁资源。这可以用来将指针传递给其他代码,同时保留资源的所有权。

    std::unique_ptr<int> ptr1 = std::make_unique<int>(42); int* rawPtr = ptr1.release(); // 释放所有权但不销毁资源 // 在适当的时候要手动释放资源,以免内存泄漏 delete rawPtr;

  3. 使用 reset 函数: std::unique_ptrreset 成员函数允许你改变它所拥有的资源。它会释放当前资源并接收一个新的资源指针。这也可以用于将所有权转移给另一个 std::unique_ptr

    std::unique_ptr<int> ptr1 = std::make_unique<int>(42); std::unique_ptr<int> ptr2 = std::make_unique<int>(99); ptr2.reset(ptr1.release()); // 释放 ptr2 的资源,将 ptr1 的资源转移给 ptr2

需要注意的是,转移所有权后,原来的 std::unique_ptr 将不再拥有资源,不应再次使用它。这些转移所有权的操作能够有效地管理资源的生命周期,避免资源泄漏和重复释放的问题。

unique_ptr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五百五。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值