C++ std::unique_ptr的用法(附带实例)
C++11 引入了 3 种智能指针,它们是 std::shared_ptr、std::unique_ptr 和 std::weak_ptr。这些智能指针提供了更安全和方便的内存管理方式,主要用于管理动态分配的对象,主要通过利用对象的析构操作来自动释放内存,以此来提高内存的安全性。
与 std::shared_ptr 不同,std::unique_ptr 不能被复制或共享,它通过独占资源的所有权来确保资源可以正确地被释放。
std::unique_ptr 是独占性的,只能有一个 std::unique_ptr 指向同一资源。当 std::unique_ptr 被销毁或转移所有权时,它会自动释放所拥有的资源。因为 std::unique_ptr 不需要维护引用计数,相比于 std::shared_ptr 更轻量。
std::unique_ptr 支持移动语义,可以通过 std::move() 将所有权从一个 std::unique_ptr 转移到另一个 std::unique_ptr,而不会对资源进行复制。
下面是 std::unique_ptr 的一个简单示例,代码如下:
与 std::shared_ptr 不同,std::unique_ptr 不能被复制或共享,它通过独占资源的所有权来确保资源可以正确地被释放。
std::unique_ptr 是独占性的,只能有一个 std::unique_ptr 指向同一资源。当 std::unique_ptr 被销毁或转移所有权时,它会自动释放所拥有的资源。因为 std::unique_ptr 不需要维护引用计数,相比于 std::shared_ptr 更轻量。
std::unique_ptr 支持移动语义,可以通过 std::move() 将所有权从一个 std::unique_ptr 转移到另一个 std::unique_ptr,而不会对资源进行复制。
下面是 std::unique_ptr 的一个简单示例,代码如下:
#include <iostream> #include <memory> class Resource { public: Resource() { std::cout << "Resource acquired" << std::endl; } ~Resource() { std::cout << "Resource released" << std::endl; } void doSomething() { std::cout << "Doing something with the resource" << std::endl; } }; int main() { std::unique_ptr<Resource> ptr(new Resource()); if (ptr) { ptr->doSomething(); // 输出 "Doing something with the resource" } // 使用 std::move 将所有权转移给另一个 std::unique_ptr std::unique_ptr<Resource> newPtr = std::move(ptr); if (newPtr) { newPtr->doSomething(); // 输出 "Doing something with the resource" } return 0; }输出结果为:
Resource acquired
Doing something with the resource
Doing something with the resource
Resource released