在函数调用中取消引用刚刚创建的shared_ptr是否安全?

时间:2015-06-10 09:25:49

标签: c++ shared-ptr dereference

让A成为一个班级。

请考虑以下代码段:

A& a = *make_shared<A>();
CallSomeFunctionAcceptingAReferenceToA(a);

现在,这显然不起作用,因为shared_ptr中对A实例的引用计数器在第一行中递减为零,并且实例被破坏。如果我在VS2010中编译它,我会遇到运行时错误。没关系。相反,我可以这样做:

auto a = make_shared<A>();
CallSomeFunctionAcceptingAReferenceToA(*a);

这是安全合法的。

我想更紧凑地写这个,那么这个:

CallSomeFunctionAcceptingAReferenceToA(*make_shared<A>());

(请注意,在我的应用程序中,make_shared被对工厂的调用所取代,该工厂将shared_ptr返回给实例)。如果我在VS2010中编译它,程序运行正常,但根据C ++标准是否合法?

0 个答案:

没有答案