智能指针引用计数为0后发生了什么? 您所在的位置:网站首页 js引用计数变为0怎么回事 智能指针引用计数为0后发生了什么?

智能指针引用计数为0后发生了什么?

2024-07-07 11:01| 来源: 网络整理| 查看: 265

来源:微信公众号「编程学习基地」

文章目录 智能指针简介shared_ptr智能指针对比普通指针基本用法智能指针应用智能指针引用计数为0,调用的是子类还是基类的析构?智能指针引用计数为0,我想干件大事注意事项智能指针相关的函数总结

智能指针简介

为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer)。在现代 c + + 编程中,标准库包含 智能指针,这些指针用于帮助确保程序不会出现内存和资源泄漏,并具有异常安全。C++11提供了三种智能指针:std::shared_ptr, std::unique_ptr, std::weak_ptr,使用时需添加头文件#include。

shared_ptr

shared_ptr 类型是 C++ 标准库中的一个智能指针,是为多个所有者可能必须管理对象在内存中的生命周期的方案设计的。shared_ptr 使用引用计数,每一个 shared_ptr 的拷贝都指向相同的内存。每引用它一次,内部的引用计数加1,每析构一次,内部的引用计数减1,减为0时,删除所指向的堆内存。shared_ptr内部的引用计数是安全的,但是对象的读取需要加锁。

智能指针对比普通指针 #include #include using namespace std; class Data { public: Data() { cout cout public: Data(int id):m_id(id) { cout { DataPtr dataPtr1 (new Data(1)); //new一个 shared_ptr 对象 DataPtr dataPtr2 = std::make_shared(2);//构造一个 shared_ptr对象 dataPtr1.reset(); //重置智能指针,释放其关联的指针内存 // 首先new Data对象,然后智能指针引用计数减1,引用计数为0,故析构 Data(1),指针指针载指向 Data(3) dataPtr2.reset(new Data(3)); cout cout { DataPtr dataPtr1(new Data(1)); //new一个 shared_ptr 对象 cout public: Father(std::string name) {} ~Father() {cout m_name = name; } ~Son() { cout public: Person(string name) { m_name = name; } ~Person(){ std::cout public: Student(string name) : Person(name) { std::cout cout Student *p = (Student *)(val); if (p) { cout PersonPtr pStu = createPerson("deroy"); cout std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有