std :: unique_ptr初始化方法

问题描述 投票:0回答:1

我看到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>()方法,但是甚至允许上述初始化方法?

我在这里想念东西吗?

c++ pointers smart-pointers undefined-behavior unique-ptr
1个回答
0
投票

几个原因:

  1. make_unique使用自定义删除器,因此应该处理自定义分配。将分配器传递给假设的allocate_unique很麻烦。
  2. .release()相同,可以提供一个代码,以不同的方式管理生命周期(包括使用原始指针的C接口中的API)。
  3. 历史原因,make_unique仅在C ++ 14中引入。
© www.soinside.com 2019 - 2024. All rights reserved.