《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());
相关推荐
「QT(C++)开发工程师」6 小时前
C++ 多种单例模式
java·c++·单例模式
五_谷_丰_登7 小时前
C++模板元编程学习——模板简介
c++·stl·c++标准库
2301_811232987 小时前
C++中的契约编程
开发语言·c++·算法
2401_829004027 小时前
C++中的访问者模式
开发语言·c++·算法
D_evil__7 小时前
【Effective Modern C++】第三章 转向现代C++:13. 优先选用const_iterator,而非iterator
c++
赵萱婷7 小时前
C++17 nodiscard属性深度解析
开发语言·c++·经验分享
kklovecode7 小时前
C++对C语言的增强
c语言·开发语言·c++
m0_748248657 小时前
C语言向C++过渡
c语言·c++·算法