主要观点:介绍 C++ 的std::shared_ptr,它能自动释放所指对象,通过原子操作实现引用计数的线程安全,但对象本身的访问非线程安全,需用户确保线程安全并使用互斥锁。
关键信息:
std::shared_ptr基于引用计数,最后一个指向对象的std::shared_ptr销毁时自动释放对象。- 引用计数使用
std::atomic实现线程安全,对象访问需用户加互斥锁保证线程安全。 - 给出简化自定义
std::shared_ptr的代码示例,包括构造、复制构造、赋值重载、析构等操作。 - 讨论对象销毁和释放的线程安全,最后一个引用计数为 1 的
std::shared_ptr析构时才会销毁对象,不会出现对象被两次销毁的情况。
重要细节: - 代码中通过
fetch_add和fetch_sub操作原子地增加和减少引用计数。 - 在
main函数中创建SharedPtr并在多个线程中对其指向的对象进行操作,使用互斥锁保证线程安全。 - 给出构建和运行程序的命令,使用
g++编译代码并运行生成的可执行文件。
参考文献:std::shared_ptr- CPP Reference(https://en.cppreference.com/w...)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。