对于std :: variant有一个uses_allocator的特化,但对于std :: optional则没有。为什么呢?
答案 0 :(得分:0)
不允许实现使用额外的存储(例如动态内存)来分配其包含的值。
所以不需要分配器。
虽然变体23.7.3.1也是如此:
不允许实现使用额外的存储(例如动态内存)来分配包含的值。
显然,uses_allocator
was removed for C++17的std::variant
专精(HT:@ K-ballo!)。
答案 1 :(得分:0)
因为
如果可选项包含值,则保证该值 作为可选对象足迹的一部分分配,即没有动态 内存分配一直在发生。因此,可选对象建模 对象,而不是指针,即使运算符*()和operator->() 已定义。
http://en.cppreference.com/w/cpp/utility/optional
另一方面,std::variant
曾用于支持早期版本标准中的分配器,所以我觉得这种专业化是那些日子的残余。