为什么没有std :: uses_allocator ?
问题描述:
std :: variant有一个uses_allocator的专门化,但不适用于std :: optional。为什么?为什么没有std :: uses_allocator <std :: optional>?
答
实现不允许使用额外的存储器,比如动态存储器,分配其包含的值。
所以没有必要为一个分配器。
虽然同样是变体23.7.3.1真:
实现不允许使用额外的存储器,比如动态存储器,以分配所包含的值。
显然,uses_allocator
专业化为std::variant
was removed for C++17(HT:!@ K-BALLO)。
答
由于
如果任选包含一个值,该值被保证是 分配为可选的对象足迹部分,即没有动态 存储器分配曾经发生。因此,即使已定义运算符*()和运算符 - >() ,可选对象也会模拟一个对象,而不是指针。
http://en.cppreference.com/w/cpp/utility/optional
在另一方面,用于支持分配器在标准的早期版本std::variant
,所以我感觉这种专业化是当年的遗迹。
也许因为['std :: optional'](http://en.cppreference.com/w/cpp/utility/optional)不能通过[allocator]创建(http://en.cppreference .com/w/cpp/concept/Allocator),但['std :: variant'](http://en.cppreference.com/w/cpp/utility/variant)可以吗? –