《Effective C++》条款17

以独立语句将newed对象置入智能指针

cpp 复制代码
class A
{...};
int g()
{...}
int f(shared_ptr<A> a,g())
{...}
int main()
{
	f(shared_ptr<A> (new A), g());
}

假如你想通过主函数里的语句进行调用f函数。虽然看上去没有什么问题,但是实际上可能会造成内存泄漏:

程序的执行顺序应该是这样的:

1.执行"new A"

2.调用g()

3.调用shared_ptr构造函数

所以,出现问题的可能之一是对g()函数的调用出现了异常,那么"new A"的指针会被遗漏,造成了内存泄漏。

解决方法就是:

cpp 复制代码
shared_ptr<A> ptr(new A);
f(ptr, g());
相关推荐
m0_748248021 小时前
基于 C++ 的高性能批量媒体文件压缩程序
c++·人工智能·数据挖掘
Larry_Yanan1 小时前
QML学习笔记(五十三)QML与C++交互:数据转换——序列类型与 JavaScript 数组的转换
c++·笔记·学习
努力努力再努力wz1 小时前
【Linux进阶系列】:线程(上)
java·linux·运维·服务器·数据结构·c++·redis
仟千意1 小时前
C++:类和对象---初级篇
c++
Brianna Home2 小时前
现代C++:从性能泥潭到AI基石
开发语言·c++·算法
qq19257230272 小时前
c++特性
开发语言·c++·算法
这儿有一堆花3 小时前
C语言递归宏详解
c语言·开发语言·c++
ue星空3 小时前
全局描述符表GDT (Global Descriptor Table)
c++
oioihoii4 小时前
C++中的多态:动态多态与静态多态详解
java·开发语言·c++
TinyPiXOS开发者联盟4 小时前
轻量级嵌入式系统的 Lottie 动画实现
linux·c++·动画·嵌入式开发·lottie·tinypixos·tpgui