《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());
相关推荐
独隅28 分钟前
CLion 接入 Codex 的完整配置使用全面指南
c++·ide·ai·c++23
老洋葱Mr_Onion1 小时前
【C++】高精度模板
开发语言·c++·算法
我不是懒洋洋2 小时前
从零实现一个分布式计算:MapReduce的核心设计
c++
小王C语言12 小时前
【7. 实现登录注册模块】:实现会话管理、注册/登录/退出 API
网络·c++
峥无15 小时前
C++11 深度详解:现代 C++ 基石全梳理
开发语言·c++·笔记
阿米亚波15 小时前
【C++ STL】std::unordered_multimap
开发语言·数据结构·c++·笔记·stl
小王C语言15 小时前
【3. 基于 Vibe Coding 的 OJ 平台】. 构建仓库、环境准备、需求梳理、安装依赖
网络·c++
小王C语言16 小时前
【8.进行接口测试】:通过 curl 进行接口自动化测试 / 通过 python 程序进行接口自动化测试
网络·c++
888CC++17 小时前
C++ 快速学习指南:从入门到进阶的实战路线
开发语言·c++
小小晓.17 小时前
C++记:函数
开发语言·c++·算法