《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());
相关推荐
杜子不疼.32 分钟前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
石山代码2 小时前
C++ 内存分区 堆区
java·开发语言·c++
张小姐的猫4 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
做人求其滴6 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣
见叶之秋6 小时前
C++基础入门指南
开发语言·c++
计算机安禾6 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法
玖釉-7 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
欧米欧7 小时前
C++进阶数据结构之搜索二叉树
开发语言·数据结构·c++
青小莫7 小时前
C++之vector讲解
c++·stl
计算机安禾8 小时前
【c++面向对象编程】第41篇:函数模板与类模板:泛型编程的基石
开发语言·c++·算法