导航菜单

智能指针

学习C++智能指针的类型和使用方法

78%
独占式智能指针

unique_ptr 基础

独占所有权的智能指针,不允许共享资源。

#include <iostream>
#include <memory>
using namespace std;

class Resource {
public:
    Resource(const string& n) : name(n) {
        cout << "Resource " << name << " 被创建" << endl;
    }
    
    ~Resource() {
        cout << "Resource " << name << " 被销毁" << endl;
    }
    
    void use() const {
        cout << "Resource " << name << " 被使用" << endl;
    }
    
private:
    string name;
};

// unique_ptr的基本使用
void basic_unique_ptr() {
    // 创建unique_ptr
    unique_ptr<Resource> ptr1(new Resource("ptr1"));
    
    // 推荐使用make_unique(C++14)
    auto ptr2 = make_unique<Resource>("ptr2");
    
    // 使用资源
    ptr1->use();
    ptr2->use();
    
    // 转移所有权
    unique_ptr<Resource> ptr3 = move(ptr1);  // ptr1现在为nullptr
    
    // 检查指针
    if (ptr1 == nullptr) {
        cout << "ptr1不再拥有资源" << endl;
    }
    
    // 释放所有权
    ptr2.reset();  // 立即销毁资源
    
    // 获取原始指针(谨慎使用)
    Resource* raw_ptr = ptr3.get();
    raw_ptr->use();
    
    // 自动销毁
}  // ptr3在这里自动销毁

// 自定义删除器
void custom_deleter() {
    auto deleter = [](Resource* p) {
        cout << "使用自定义删除器" << endl;
        delete p;
    };
    
    unique_ptr<Resource, decltype(deleter)> ptr(
        new Resource("custom"), deleter);
}