手动 new/delete 的时代早该结束了。现代 C++ 提供了一套表达所有权的新词汇。
所有权即文档
unique_ptr 表达独占,shared_ptr 表达共享。函数签名里写清楚所有权语义,调用者不需要读注释就知道该不该释放。
共享的代价
shared_ptr 的引用计数是原子操作,拷贝有成本;更麻烦的是循环引用导致内存泄漏,需要弱引用打断环。
实践建议
默认用 unique_ptr,确有共享需求再换 shared_ptr;观察者、缓存这类「知道但不拥有」的关系一律 weak_ptr。
unique_ptr、shared_ptr 与弱引用的适用边界,以及循环引用的排查方法。
手动 new/delete 的时代早该结束了。现代 C++ 提供了一套表达所有权的新词汇。
unique_ptr 表达独占,shared_ptr 表达共享。函数签名里写清楚所有权语义,调用者不需要读注释就知道该不该释放。
shared_ptr 的引用计数是原子操作,拷贝有成本;更麻烦的是循环引用导致内存泄漏,需要弱引用打断环。
默认用 unique_ptr,确有共享需求再换 shared_ptr;观察者、缓存这类「知道但不拥有」的关系一律 weak_ptr。