《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());
相关推荐
乐观勇敢坚强的老彭10 分钟前
C++信奥洛谷循环章节练习题
java·c++·算法
Shingmc310 分钟前
【Linux】序列化与反序列化
开发语言·c++
白夜111723 分钟前
C++设计模式(高内聚,低耦合)
c++·设计模式
我不是懒洋洋25 分钟前
【数据结构】二叉树-堆(树的概念、二叉树的概念、顺序结构的结构及实现、堆的实现、堆排序、TopK问题)
c语言·数据结构·c++·经验分享·算法·青少年编程
ximu_polaris26 分钟前
设计模式(C++)-结构型模式-桥接模式
c++·设计模式·桥接模式
楼田莉子27 分钟前
仿muduo库的高并发服务器——正则表达式与any类介绍及其简单模拟实现
linux·服务器·c++·学习·设计模式
wengqidaifeng2 小时前
C++从菜鸟到强手:1.基础入门
开发语言·c++
handler0110 小时前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
t***54410 小时前
如何在Dev-C++中使用Clang编译器
开发语言·c++
Qbw200411 小时前
【Linux】进程地址空间
linux·c++