为什么不使unique_ptr只接受临时?

时间:2016-07-18 17:35:48

标签: c++11 smart-pointers

This SO帖似乎暗示语言确实只支持接受临时论点。

为什么unique_ptr设计为接受别名指针,如下所示:

auto ptr = new Widget{};
auto uptr = std::unique_ptr<Widget>(ptr);

为什么不限制为:

auto uptr = std::unique_ptr<Widget>(new Widget{});

2 个答案:

答案 0 :(得分:1)

因为这没有帮助。

要求指针是由给定删除器的合适分配函数创建的,这与临时不同。

您无法区分由new表达式,函数调用和&运算符创建的指针值类别 - 它们都是右值。

答案 1 :(得分:-1)

据我所知,没有充分的理由,我认为这是对图书馆C ++语言的开发不足。

我问了同样的问题Why is raw pointer to shared_ptr construction allowed in all cases?

我仍然没有找到一个很好的理由不让std::unique_ptr的构造函数接受来自new或来自工厂的r值引用。在这里,我把它作为答案,而不是作为评论,把它放在与我不同意的另一个答案的同一级别。

如果你真的需要接受现有的指针,你总是可以使用std::move进行强制转换。因此,这不是一个借口,因为这不是常态。