为何不要构造一个临时的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.

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

C++小品:吃火锅与shared_ptr,指针,拷贝构造函数和delete

C++小品:吃火锅与shared_ptr,指针,拷贝构造函数和delete 读者Terry问到一个关于拷贝构造函数的问题,大家可以参考答Terry:拷贝构造函数,其中论述了拷贝构造函数的必要性...

实现一个简单的 shared_ptr

智能指针的简单实现

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

[内存管理]智能指针shared_ptr与工厂函数相结合

shared_ptr很好地消除了显式的delete调用,如果掌握了它的用法,那么可以说,以后delete将会彻底消失在你的编程词典中。 但这还不够,因为shared_ptr的构造还需要new调用,这...
  • ajioy
  • ajioy
  • 2012-03-17 12:53
  • 3553

shared_ptr和weak_ptr智能指针结合使用的一个实例

结合shared_ptr、weak_ptr 一个实例。 感觉这个例子很好, 结合了很多知识技术。这个实例功能是非常简单模拟实现std::vector。 (只是非常简单一些操作),当然也可以继续扩展,甚...

从 this 指针获得一个shared_ptr: enable_shared_from_this

当你只有一个this指针的时候,而你又想通过这个this指针得到一个shared_ptr,你就需要用到 enable_shared_from_this 了。其中 enable_shared_from_...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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