《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());
相关推荐
殳翰12 小时前
下服务器端开发流程及相关工具介绍(C++)
开发语言·c++
青瓦梦滋12 小时前
协议定制/序列化-反序列化(Linux视角)
linux·服务器·网络·c++
山登绝顶我为峰 3(^v^)316 小时前
C/C++ 交叉编译方法
java·c语言·c++
郝学胜-神的一滴20 小时前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal
小小龙学IT21 小时前
C++ 并发编程深度解析:从内存模型到无锁数据结构
数据结构·c++
凯瑟琳.奥古斯特21 小时前
力扣1013三等分解法与C++实现
开发语言·c++·算法·leetcode·职场和发展
一拳一个呆瓜1 天前
【STL】iostream 编程:缓冲区的作用
c++·stl
我不是懒洋洋1 天前
从零实现一个分布式任务调度器:XXL-JOB的核心设计
c++
凯瑟琳.奥古斯特1 天前
力扣1012数位DP解法详解
开发语言·c++·算法·leetcode·职场和发展