在我看来,boost scoped_ptr和shared_ptr中的reset方法导致构造和销毁的错误顺序:
boost::scoped_ptr<Component> component(GetDefaultComponent());
component.reset(new BetterComponent); // 1. Creation of the new object
// 2. Destruction of the old object
Run Code Online (Sandbox Code Playgroud)
这是IMO的错误订单.
可以先调用不带参数的reset方法,然后设置新指针.然而,这对我来说似乎是一种解决方法.(它是一种"解决方法"意味着存在错误.)
我相信,提振人非常聪明.因此,目前的方法必须有理由.
有谁知道更多?
Pup*_*ppy 13
这绝对是正确的顺序.如果发生什么new BetterComponent抛出?哎呦.这与所有事情发生的顺序相同,它被称为复制和交换,这是最好的方法.
特别是因为你实际上并没有说明当前订单是错误的.