#include <iostream>
#include <memory>
int main() {
// 创建一个指向整数对象的 std::shared_ptr
std::shared_ptr<int> ptr1 = std::make_shared<int>(42);
// 输出初始引用计数
std::cout << "ptr1 引用计数: " << ptr1.use_count() << std::endl;
// 创建另一个指向相同对象的 std::shared_ptr
std::shared_ptr<int> ptr2 = ptr1;
// 输出赋值后的引用计数
std::cout << "ptr1 引用计数: " << ptr1.use_count() << std::endl;
std::cout << "ptr2 引用计数: " << ptr2.use_count() << std::endl;
// 重置 ptr1,使其不再指向该对象
ptr1.reset();
// 输出重置后的引用计数
std::cout << "ptr1 引用计数: " << ptr1.use_count() << std::endl;
std::cout << "ptr2 引用计数: " << ptr2.use_count() << std::endl;
// 重置 ptr2,对象将被销毁
ptr2.reset();
// 输出最终的引用计数
std::cout << "ptr1 引用计数: " << ptr1.use_count() << std::endl;
std::cout << "ptr2 引用计数: " << ptr2.use_count() << std::endl;
return 0;
}
- 对象创建:使用
std::make_shared<int>(42)
创建了一个指向整数对象42
的std::shared_ptr<int>
,此时引用计数为1。
- 赋值:
std::shared_ptr<int> ptr2 = ptr1;
语句将ptr1
赋值给ptr2
,它们现在指向同一个对象,引用计数增加到2。
- 销毁:
ptr1.reset();
使ptr1
不再指向对象,引用计数减为1。
ptr2.reset();
使ptr2
也不再指向对象,引用计数减为0,此时对象被销毁。