c++智能指针std::shared_ptr

// C++11 标准引入了 `std::shared_ptr`,它是智能指针的一种实现,用于管理资源,特别是在堆上分配的内存。
// `shared_ptr` 类型的指针,可以将指针的管理(包括内存资源的占有和占有数量的计数)委托给其他的指针。
// `shared_ptr` 使用引用计数的方式,以确保在没有引用指向所管理的内存时,自动释放该内存。
#include <iostream>
#include <memory>

class MyClass
{
public:
    MyClass() {
        std::cout << "MyClass created" << std::endl;
    }
    ~MyClass() {
        std::cout << "MyClass destoryed" << std::endl;
    }
    void DoSomething() {
        std::cout << "Do something" << std::endl;
    }
};

int main()
{
    std::shared_ptr<MyClass> ptr1(new MyClass); // ptr1托管一个MyClass对象,引用技术初始值为1
    std::shared_ptr<MyClass> ptr2 = ptr1; // ptr2也托管MyClass对象,现在引用计数为2
    std::cout << "The reference count is " << ptr1.use_count() << std::endl; // 显示该对象的引用计数
    ptr1->DoSomething(); // 通过ptr1访问对象
    (*ptr1).DoSomething();
    ptr2->DoSomething(); // 通过ptr1访问对象
    (*ptr2).DoSomething();
    ptr2.reset(); // 释放ptr2的引用,引用计数-1,现在引用计数为1
    std::cout << "The reference count is " << ptr1.use_count() << std::endl;
    ptr1.reset(); // 释放ptr1的引用,引用计数减一,现在引用计数为0,MyClass对象被自动销毁
    // 注意:
    // `ptr1` 是一个指向对象的智能指针,它重载了 `operator->` 和 `operator*` 运算符。
    // 当使用 `->` 运算符时,实际上是在访问被指向的对象指针的成员函数或成员变量。
    // 当使用 `.` 运算符时,实际上是先调用 `operator*` 运算符获取指向的对象,然后再访问该对象的成员函数或成员变量。
    // 因此,在上面的示例中,`ptr1` 可以使用 `->` 运算符来直接访问 `MyClass` 对象的成员函数 `doSomething()`。 
    // 例如,可以使用 `ptr1->doSomething()` 来调用 `doSomething()` 函数,因为 `ptr1` 实际是指向 `MyClass` 对象的指针。
    // 也可以使用 `(*ptr1).doSomething()` 这样的语法来访问 `doSomething()` 函数,
    // 这种方式会先将智能指针解引用为原始指针类型,然后访问该指针指向的对象的成员函数

    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值