C++语法学习笔记之六 --- 生命周期、作用域
1、std::unique_ptr 作用域
// 1. 局部unique_ptr:此时entry拥有StorageEntry对象的所有权 std::unique_ptr<StorageEntry> entry = std::make_unique<StorageEntry>();// 2. 记录原始指针:entry.get()返回对象的原始指针,存入buffer2storageEntry buffer2storageEntry[genBuffer] = entry.get();// 3. 转移所有权:通过std::move将entry的所有权转移给StorageEntryVec中的元素 StorageEntryVec.emplace_back(std::move(entry));
std::unique_ptr
是 “独占所有权” 的智能指针:同一时间只有一个unique_ptr
能管理对象,当它离开作用域(或被销毁)时,会自动释放所管理的对象。但代码中通过std::move
转移了所有权,避免了局部变量销毁导致的对象释放(当前代码通过std::move
将所有权转移到了StorageEntryVec
,只要StorageEntryVec
的生命周期足够长(通常与MemPlan
对象的生命周期一致),指针就会一直有效)
2、shared_ptr
作用域
通过 引用计数 实现共享所有权,只要存在任何一个 shared_ptr
未被销毁,对象就不会被释放