问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

智能指针

发布网友 发布时间:2023-05-17 05:08

我来回答

1个回答

热心网友 时间:2023-09-12 07:11

智能指针可以解决悬挂指针的问题。

一 效率

shared_ptr 有一个引用计数变量 int m_count;  但在多线程下面赋值是线程安全的,应该是有个countMutex,但是对里面的指针对象操作肯定不是线程安全的,需要程序自己保证。

所以效率上使用unique_ptr 更高一些,类似原生指针。 可以用move()移交对象,保持独立性。

#include <memory>

unique_ptr<MyClass> pMyClass(new MyClass());
std::unique_ptr<int> pTest = std::make_unique<int>(3);

使用make_shared构造共享指针。效率更高,原理见参考2。

shared_ptr<MyClass> pMyClass= make_shared<MyClass>("huang");

二 内存泄漏

 class A {

public:

    shared_ptr<B> m_b;

};

class B {

public:

    shared_ptr<A> m_a;

};

{

    shared_ptr<A> pa(new A());   对象A引用计数为1

        shared_ptr<B> pb(new B()); 对象B引用计数为1

        pa -> m_b= pb;   对象B引用计数为2

        pb -> m_a = pa;  对象A引用计数为2

 }

   pa 释放 对象A引用计数为1, pb 释放 对象B引用计数为1, 由于对象A, B没有释放,那么引用计数就不会被减1. 永远不会释放。

 解决方案:
    1 设计上我们感觉A要用智能指针包裹,那么他的成员就不允许有智能指针对象。 c++这方面的问题太多,我们应该多有这些设计原则。

    2  shared_ptr成员改为 weak_ptr,weak_ptr不会添加引用计数。其实就没有意义了。很容易出现空指针异常。还不如直接指针。

说明:
    1 unique_ptr 对象移动拷贝的时候会释放自身的包裹对象,然后拷贝移动的对象。不会造成内存问题。

参考:
     1 https://zhuanlan.hu.com/p/101938827
     2 https://blog.csdn.net/suwanworld/article/details/103940013

 
指针有哪些类型的

智能指针: 是C++中为了处理原生指针可能引发的问题而引入的一种安全指针。智能指针在申请内存时自动管理内存,当智能指针离开作用域时会自动释放内存,有效避免了原生指针可能导致的内存泄漏问题。常见的智能指针类型包括std::unique_ptr、std::shared_ptr和std::weak_ptr等。指针数组与数组指针: 指针数组...

智能指针可以自动释放内存吗

是的,智能指针可以自动释放内存。智能指针是一种特殊的指针,它会在对象不再被引用时自动释放其分配的内存。智能指针的这种特性可以避免内存泄漏和悬挂指针等问题,使得代码更加健壮和可靠。在使用智能指针时,程序员不需要手动释放内存,只需要在声明时指定其类型即可。我们可以利用类中编译器自动调用其构造...

shared_ptr作用

shared_ptr是一种特殊的智能指针,其设计类似于普通指针,但它具有独特的引用计数功能。每当有一个shared_ptr指向某个对象时,该对象的引用计数就会增加。当引用计数变为0,意味着没有shared_ptr再指向该对象,此时,系统会自动删除这个对象,从而避免了非环形数据结构中常见的资源泄露问题。相比之下,传统...

c++智能指针用法

智能指针是 c++中有四个智能指针: auto_ptr、shared_ptr、weak_ptr、unique_ptr ,其中后三个是c++11支持,并且第一个已经被c++11弃用。 智能指针是一个 RAII(Resource Acquisition is initialization) 类模型,用来动态的分配内存。当超出类的作用域时,类会自动调用析构函数,析构函数会自动释...

探索android的强指针实现

强指针和弱指针基础Android中的智能指针包括:轻量级指针、强指针、弱指针。强指针:它主要是通过强引用计数来进行维护对象的生命周期。弱指针:它主要是通过弱引用计数来进行维护所指向对象的生命周期。如果在一个类中使用了强指针或者弱指针的技术,那么这个类就必须从RefBase这个类进行做继承,因为强指针和...

C++|深入理解智能指针

智能指针是一个类类型,它乔装打扮成一个指针,但额外提供了内建指针所无法提供的能力。通常而言,一个智能指针通过使用类的构造函数、析构函数和复制操作符所提供的能力,来控制(或跟踪)对它所指向的东西的访问,而内建指针在这方面则无能为力。所有智能指针都重载 -&gt; 和* 操作符,从而可以采用...

Windows句柄是什么东西?

1、句柄为一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。2、整个Windows编程的基础,一个句柄指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个...

android智能指针介绍

轻量级指针在Android中是由LightRefBase来提供的,看下内容:一个类只要继承LightRefBase,然后配合sp就可以使用智能指针的功能了。sp后面会单独介绍。从这儿可以看出来,轻量级指针主要是在类里面添加了一个原子变量作为计数变量,然后通过incStrong和decStrong来实现计数的增减。这儿有一个细节是这个计数可能会在...

c++11智能指针(一) shared_ptr

智能指针是存储动态分配对象指针的类,用于生命周期的控制。当指针离开其作用域时,自动销毁动态分配的空间,防止内存泄漏。使用智能指针需要包含头文件#include&lt;memory&gt; std::shared_ptr采用引用计数,每一个shared_ptr的拷贝都指向相同的内容,当最后一个shared_ptr析构的时候,内存被释放 当使用shared_ptr...

智能指针原理

实现原理:采用引用计数器的方法,允许多个智能指针指向同一个对象,每当多一个指针指向该对象时,指向该对象的所有智能指针内部的引用计数加1,每当减少一个智能指针指向对象时,引用计数会减1,当计数为0的时候会自动的释放动态分配的资源。1) 智能指针将一个计数器与类指向的对象相关联,引用计数器跟踪...

智能指针c++11 智能指针的实现 智能指针shared_ptr 智能指针和普通指针区别 智能指针的用法 c++智能指针 释放智能指针 智能指针有哪些 智能指针的原理
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
三菱PLC换刀报警是什么原因? 求"无论……都……"的三种用法,并举例 我的手机装了管家后,别人打电话都提示关机,卸载,重装,恢复出厂设置都没... word图片怎么设置环绕方式? 找一些重生成动物的小说 古文里哪个字表示爱 微信一键删除僵尸粉软件2.2破解版下载介绍_微信一键删除僵尸粉软件2.2... 中国历史上著名的画家有哪些 我国历史上著名画家哪些 中国古代有哪些画家 中国古代画家都有哪些 早饭是指早上起来的第一顿饭还是指在固定的时间内吃的饭叫早饭? 到底哪一餐才算是早餐 ipadair的3G电信+3G联通是什么意思? 苹果手机网络测速&#x2212;60是什么意思? 涡街流量计小信号切除的范围 公积金提取后贷款 公积金提取以后还可以申请贷款吗? 三相交流异步电动机更平滑调整的方法的是? 电机检测方法及标准 电机检测标准 求2012年7月28日17时出生的尹姓训字辈男孩起名,五行属性缺啥 turnkey(一站式方案)详细资料大全 什么是turnkey模式 遍及的成语遍及的成语是什么 做四季优美随便果是不是违法行为 遍及的解释遍及的解释是什么 四季优美随便果怎么样,好不好,怎么做 一生有你这首歌表达的什么感情呢?是爱情还是别的? 水木年华的一生有你算是爱情歌吗?我打算参加学校红歌会的. 显示给对方疑是被盗号,谨防诈骗怎么办 冰箱插座多高比较合适 c++中有了智能指针和自动垃圾回收器的区别联系 map中智能指针的销毁 显示给对方疑是被盗号,谨防诈骗怎么办 南无义法胜尊者代表什么 尊者天下txt全集下载 问“达尊有三”是什麽意思 004开头是什么股票 电瓶车充电时充电器一闪一闪的是怎么回事?刚换电池充电时充电器指示灯一闪一闪怎么回事 我觉得我爱上了一个女孩,爱的很疯狂,女孩也知道我爱她,我们一直是朋友之上恋人之下的那种关系,但我觉 爱一个女生爱的疯狂快到神经病怎么办 男朋友说“疯狂”地爱我是什么意思 这是胬肉吗? 招行卡过期了怎么办理? 中国酒文化——行酒令 中华酒文化的酒令 清樽宜明月的意思清樽宜明月的意思是什么 粕叶清樽举的意思粕叶清樽举的意思是什么 男孩难得二五八 将来是有福之人? 高速越野遥控车有几个轮子 中山越野遥控车地点