#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() {
std::cout << "MyClass constructor called\n";
}
~MyClass() {
std::cout << "MyClass destructor called\n";
}
void sayHello() {
std::cout << "Hello from MyClass\n";
}
};
int main() {
// 创建一个 shared_ptr,指向一个新分配的 MyClass 对象
std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>();
// 使用 shared_ptr 调用成员函数
ptr1->sayHello();
// 创建另一个 shared_ptr,与 ptr1 共享同一个对象
{
std::shared_ptr<MyClass> ptr2 = ptr1;
// 两个指针共享同一个对象,引用计数为 2
std::cout << "Reference count: " << ptr1.use_count() << "\n";
}
// 离开作用域后,ptr2 被销毁,引用计数减为 1
std::cout << "Reference count after ptr2 goes out of scope: " << ptr1.use_count() << "\n";
// 当 ptr1 被销毁时,引用计数变为 0,对象被删除
return 0;
}
std::shared_ptr
是 C++ 标准库中提供的智能指针类型之一,用于管理动态分配的对象。它通过引用计数机制来自动管理对象的生命周期。
std::make_shared<MyClass>()
:使用 std::make_shared
来创建一个 std::shared_ptr
,它会分配并构造一个 MyClass
对象,并返回一个指向该对象的 std::shared_ptr
。
引用计数:每当有一个新的 std::shared_ptr
指向同一个对象时,引用计数会增加;当某个 std::shared_ptr
被销毁或重置时,引用计数会减少。当引用计数变为 0 时,对象会被自动删除。
use_count()
:可以通过 use_count()
方法来查看当前有多少个 std::shared_ptr
正在共享同一个对象。
析构函数:当最后一个 std::shared_ptr
被销毁时,对象的析构函数会被调用,确保资源被正确释放。
上一篇:c++ 字符串反转
下一篇:c++ private
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站