C++如何用智能指针管理内存资源分享

智能指针虽然增强了安全性,避免了潜在的内存泄漏,但是我们在使用时还是应该遵守一定的规则,以保证代码的健壮性。
(1)smart_ptr<T> 不等于 T*,使用时不能完全按照T*来使用。因为smart_ptr<T>本质上是类对象,一个用于管理内存资源的智能指针类对象,而T*是一个指向类型T的指针,二者不能随意地转换和赋值;

(2)使用独立的语句将newed对象置入智能指针,因为使用临时智能指针对象可能会引发内存泄漏。比如下面的语句:

  process(shared_ptr<A>(new A),foo());

实际上对 process() 函数调用时编译器需要完成如下三步为process()准备好实参。

(1)调用函数foo();
(2)执行new A表达式;
(3)调用shared_ptr<A>构造函数,初始化智能指针对象。

实际上,不同的编译器在执行上述三个语句时可能会有不同的顺序,如果编译器将(2.2)放在(2.1)之前执行,执行顺序如下:

(1)执行new A表达式;
(2)调用函数foo();
(3)调用shared_ptr<A>构造函数,初始化智能指针对象。

如果在调用函数foo()时抛出异常,那么new A表达式产生的指向堆对象指针将会丢失,于是产生了内存泄漏。解决办法就是使用独立的语句将newed对象置入智能指针,做法如下:

  shared_ptr<A> spA(new A);  process(spA,foo());

以上就是C++如何用智能指针管理内存资源的详细内容,更多关于c++ 智能指针管理内存的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/487630.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐