让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 ++标准是否合法?