为何不要构造一个临时的shared_ptr作为函数参数

原创 2011年01月11日 12:02:00

我遇到的时在构造函数的参数传送了一个 A(shared_ptr<>) ... 结果导致内存泄漏。

 

后来跟朋友交流了一下,朋友说文档里有说明 ,我至今还没查文档呢。

 

引擎了一下发现,有人遇到过类似的问题,在此记录一下

 

 

以下是我查到的内容:

http://bbs.chinaunix.net/archiver/?tid-1834186.html

 

为何不要构造一个临时的shared_ptr作为函数参数

[i=s] 本帖最后由 xyfree 于 2010-12-20 10:04 编辑 [/i]

以下是网上找来的一个说法,请大牛说说是否正确,并解释原因

-----------------------------------------

不要构造一个临时的shared_ptr作为函数的参数。
如下列代码则可能导致内存泄漏:[code]
void test() {
    foo( boost::shared_ptr<implementation>( new implementation() ), g() );
}
[/code]正确的用法为:[code]
void test(){
    boost::shared_ptr<implementation> sp ( new implementation() );
    foo(sp,g());
}
[/code]如果真的会导致 shared_ptr 没有正确的析构的话,
我没有想明白编译器背后会做什么事情,使得两段程序的语义会有所不同。

 

OwnWaterloo 发表于 2010-12-19 21:42

我记错了 ……

是在effc++ 3rd item17 Store newed objects in smart pointers in standalone statements.

 

boost::shared_ptr:传值还是传引用?

关于shared_ptr shared_ptr,顾名思义,是共享指针。boost库引入shared_ptr为了实现在C++中通过引用计数对堆对象进行内存管理的一种机制。更多关于shared_pt...
  • muyuxuebao
  • muyuxuebao
  • 2016年04月26日 19:21
  • 2767

c++11 条款19:使用std::shared_ptr来进行共享所有权的资源管理

条款19:使用std::shared_ptr来进行共享所有权的资源管理 使用垃圾回收的程序员会嘲笑c++程序员阻止资源泄漏的方法,“好原始啊!”他们嘲笑。“你们没有在1960年代从Lisp里获取备忘录...
  • coolmeme
  • coolmeme
  • 2015年01月28日 17:27
  • 8953

智能指针 shared_ptr

shared_ptr:  shared_ptr是一个最像指针的"智能指针".  shared_ptr与scoped_ptr一样包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指...
  • mmzsyx
  • mmzsyx
  • 2012年10月18日 16:52
  • 14260

shared_ptr的一些尴尬

shared_ptr在boost库中已经有多年了,C++11又为其正名,把他引入了STL库,放到了std的下面,可见其颇有用武之地;但是shared_ptr是万能的吗?有没有什么样的问题呢?本文并不说...
  • henan_lujun
  • henan_lujun
  • 2013年05月28日 14:32
  • 19403

C++智能指针shared_ptr的三种使用方式

智能指针通常是指基于引用计数的智能指针,在c++11标准中就是std::shared_ptr。它的特点是如果可以安全的放入STL容器中。 有以下三种方式可以使用shared_ptr 1. 如果你的...
  • fanyun_01
  • fanyun_01
  • 2017年03月31日 12:39
  • 1366

老题新谈 - 传值还是传引用(传地址)

java中有两种类型数据, 一类是原始数据类型(primitive type) , 也叫基本数据类型, 即byte, short, int , long, double, float, boolean...
  • pbnow
  • pbnow
  • 2007年06月07日 23:59
  • 812

【C++11新特性】 C++11智能指针之shared_ptr

C++中的智能指针首先出现在“准”标准库boost中。随着使用的人越来越多,为了让开发人员更方便、更安全的使用动态内存,C++11也引入了智能指针来管理动态对象。在新标准中,主要提供了shared_p...
  • Xiejingfa
  • Xiejingfa
  • 2016年02月26日 15:21
  • 14388

智能指针作为函数参数:普通参数、指针参数、WPARAM

一、auto_ptr和shared_ptr作为普通参数、指针参数         我想这是我们使用最多的,直接传过去好了,基本上没什么好担心的。例如:         1.         T*...
  • Alsmile
  • Alsmile
  • 2013年04月27日 14:26
  • 2455

C++11中shared_ptr的使用

C++11中shared_ptr的使用
  • fengbingchun
  • fengbingchun
  • 2016年08月13日 22:22
  • 11901

为何不要构造一个临时的shared_ptr作为函数参数

我遇到的时在构造函数的参数传送了一个 A(shared_ptr) ... 结果导致内存泄漏。后来跟朋友交流了一下,朋友说文档里有说明 ,我至今还没查文档呢。引擎了一下发现,有人遇到过类似的问题,在此记...
  • shark0001
  • shark0001
  • 2011年01月11日 12:02
  • 2138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为何不要构造一个临时的shared_ptr作为函数参数
举报原因:
原因补充:

(最多只允许输入30个字)