为什么没有std :: uses_allocator <std :: optional>?

时间:2017-08-23 13:44:54

标签: c++ allocator

对于std :: variant有一个uses_allocator的特化,但对于std :: optional则没有。为什么呢?

2 个答案:

答案 0 :(得分:0)

来自Standard 23.6.3.1

  

不允许实现使用额外的存储(例如动态内存)来分配其包含的值。

所以不需要分配器。

虽然变体23.7.3.1也是如此:

  

不允许实现使用额外的存储(例如动态内存)来分配包含的值。

显然,uses_allocator was removed for C++17std::variant专精(HT:@ K-ballo!)。

答案 1 :(得分:0)

因为

  

如果可选项包含值,则保证该值   作为可选对象足迹的一部分分配,即没有动态   内存分配一直在发生。因此,可选对象建模   对象,而不是指针,即使运算符*()和operator-&gt;()   已定义。

http://en.cppreference.com/w/cpp/utility/optional

另一方面,std::variant曾用于支持早期版本标准中的分配器,所以我觉得这种专业化是那些日子的残余。