以独立语句将newed对象置入智能指针
cppclass 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"的指针会被遗漏,造成了内存泄漏。
解决方法就是:
cppshared_ptr<A> ptr(new A); f(ptr, g());