6
为什么在C ++ 17中使用std :: make_unique?
据我了解,C ++ 14的引入std::make_unique是因为,由于未指定参数求值顺序,因此这是不安全的: f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A (说明:如果评估首先为原始指针分配内存,然后进行调用,g()并且在std::unique_ptr构造之前引发异常,则内存将泄漏。) 呼叫std::make_unique是一种限制呼叫顺序的方法,从而使事情变得安全: f(std::make_unique<MyClass>(param), g()); // Syntax B 从那时起,C ++ 17阐明了评估顺序,也使语法A变得安全,所以这是我的问题:在C ++ 17中仍然有理由使用std::make_uniqueover std::unique_ptr的构造函数吗?你能举一些例子吗? 到目前为止,我能想象的唯一原因是它只允许键入MyClass一次(假设您不需要依赖于的多态性std::unique_ptr<Base>(new Derived(param)))。但是,这似乎是一个很弱的原因,尤其是当的构造函数std::make_unique不允许指定删除器时std::unique_ptr。 只是要清楚一点,我不主张std::make_unique从标准库中删除(至少保持向后兼容才有意义),而是想知道是否仍然存在强烈推荐使用标准库的情况。std::unique_ptr
96
c++
c++17
unique-ptr