为什么不unique_ptr只接受一个临时的发呢?

Why not unique_ptr made to accept only a temporary?

This SO post 似乎表明语言确实支持只接受参数的临时变量。

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

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

为什么不限制为:

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

因为这没有用。

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

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

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

我问了同样的问题

我仍然找不到不让 std::unique_ptr 的构造函数仅接受来自 new 或工厂的右值引用的充分理由。在这里,我将其作为答案而不是评论,将其与我不同意的其他答案放在同一级别。

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