unique_ptr:独占所有权
无计数机制,管理单个对象。
std::make_unique<T>(args):创建对象std::move:转移所有权,原指针变为空reset():释放对象及原始指针
#include <iostream>
#include <memory>
int main() {
std::cout << "=== unique_ptr 演示 ===\n";
// 创建时:我是唯一的主人
std::unique_ptr<int> up1 = std::make_unique<int>(100);
std::cout << "创建 up1,值是:" << *up1 << std::endl;
// 不能直接拷贝!会编译错误
// std::unique_ptr<int> up2 = up1; // ❌ 错误!
// 只能转移所有权
std::unique_ptr<int> up2 = std::move(up1);
std::cout << "转移后:";
if (up1) {
std::cout << "up1 有值:" << *up1 << std::endl;
} else {
std::cout << "up1 为空(所有权已转移)\n";
}
if (up2) {
std::cout << "up2 有值:" << *up2 << std::endl;
}
return 0;
}
shared_ptr:共享所有权
创建对象时计数,拷贝赋值共享数量。
std::make_shared<T>(args):创建对象use_count():返回当前共享对象所有权的 shared_ptr 数量(强引用计数)reset():提前释放智能指针及资源
#include <iostream>
{
std::cout << ;
std::shared_ptr<> sp1 = std::<>();
std::cout << << sp() << std::endl;
std::shared_ptr<> sp2 = sp1;
std::cout << << sp() << std::endl;
std::shared_ptr<> sp3;
sp3 = sp1;
std::cout << << sp() << std::endl;
sp2 = std::<>();
std::cout << << sp() << std::endl;
{
std::shared_ptr<> sp4 = sp1;
std::cout << << sp() << std::endl;
}
std::cout << << sp() << std::endl;
;
}

