我看到std::unique_ptr
具有以下初始化方式:
std::unique_ptr<some_class> sc_ptr{ new some_class };
[某人可以从delete
下方some_class
分配所分配的std::unique_ptr
。
和
some_class *scptr { new some_class }
std::unique_ptr<some_class> sc_ptr1{ scptr };
std::unique_ptr<some_class> sc_ptr2{ scptr };
在std::unique_ptr
中贬低了'unique'的目的,并导致了UDB。
现在我的问题是:为什么std::unique_ptr
类甚至可以使用上述的std::make_unique<some_class>()
方法,但是甚至允许上述初始化方法?
我在这里想念东西吗?
几个原因:
make_unique
使用自定义删除器,因此应该处理自定义分配。将分配器传递给假设的allocate_unique
很麻烦。.release()
相同,可以提供一个代码,以不同的方式管理生命周期(包括使用原始指针的C接口中的API)。make_unique
仅在C ++ 14中引入。