智能指针
学习C++智能指针的类型和使用方法
78%
unique_ptr
shared_ptr
weak_ptr
独占式智能指针
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);
}
- 独占所有权,不能复制,只能移动
- 自动管理资源的生命周期
- 支持自定义删除器
- 零开销抽象,性能与原始指针相当