如何解决普通智能指针的.reset方法
| 在我看来,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
这是IMO的错误命令。
可以先调用不带参数的reset方法,然后设置新指针。但是,这对我来说似乎是一种解决方法。 (这是一个“解决方法”,表示有问题。)
我坚信,提振人非常聪明。因此,对于当前的方法一定有一个理由。
有谁知道更多吗?
解决方法
这绝对是正确的顺序。如果ѭ1投掷,会发生什么?哎呀这是所有事物发生的相同顺序,被称为复制和交换,这是最好的处理方式。
尤其是因为您实际上并没有给出当前订单错误的任何原因。
, 您始终可以在自由函数中重构它(并提防异常安全后果):
template<typename T,typename Pointer,typename... U>
void
emplace_reset(Pointer& pointer,U&&... u)
{
pointer.reset();
pointer.reset(new T(std::forward<U>(u)...));
}
// use as: emplace_reset<BetterComponent>(component);
但这不是解决方法,因为reset成员的功能与广告中的相同。您要的是一项新功能。
不提供所需功能(超出异常安全性/事务语义之外)的可能原因是,指针从未创建过它们指向的对象:构造函数假定拥有,仅此而已。 reset
是一致的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。