Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ std::shared_ptr

作者:整整ー世♂陰霾そ   发布日期:2025-05-28   浏览:33

#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;
}

解释说明:

  1. std::shared_ptr 是 C++ 标准库中提供的智能指针类型之一,用于管理动态分配的对象。它通过引用计数机制来自动管理对象的生命周期。

  2. std::make_shared<MyClass>():使用 std::make_shared 来创建一个 std::shared_ptr,它会分配并构造一个 MyClass 对象,并返回一个指向该对象的 std::shared_ptr

  3. 引用计数:每当有一个新的 std::shared_ptr 指向同一个对象时,引用计数会增加;当某个 std::shared_ptr 被销毁或重置时,引用计数会减少。当引用计数变为 0 时,对象会被自动删除。

  4. use_count():可以通过 use_count() 方法来查看当前有多少个 std::shared_ptr 正在共享同一个对象。

  5. 析构函数:当最后一个 std::shared_ptr 被销毁时,对象的析构函数会被调用,确保资源被正确释放。

上一篇:c++ 字符串反转

下一篇:c++ private

大家都在看

c++闭包

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++ 获取系统时间

c++进制转换函数

c++ tcp

c++ gcd函数

c++ cli

c++ 树

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站