是否允许std :: variant为其成员分配内存?

时间:2017-12-18 20:36:01

标签: c++ dynamic-memory-allocation c++17 variant

我想知道std::variant的实现是否必须“平坦”或是否允许为其成员动态分配内存,这样一系列变体会退化为一系列指针,从而破坏缓存局部性。

2 个答案:

答案 0 :(得分:21)

不,非常明确。来自[variant.variant]

  

任何给定时间的variant的任何实例都拥有其替代类型之一的值,或者它没有值。当variant的实例包含替代类型T的值时,表示类型为T的值,称为变体对象的包含值,在variant对象的存储内分配。 不允许实现使用额外的存储(例如动态内存)来分配包含的值。包含的值应分配在variant存储区域中,适合所有类型的Types...。它是实现定义的,是否支持过度对齐类型。

答案 1 :(得分:6)

根据cppreference ::std::variant,不得分配动态内存。

  

与联合一样,如果变体持有某个对象类型T的值,则   T的对象表示直接在对象内分配   变体本身的表示。变体是不允许的   分配额外的(动态)内存。