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

问题描述 投票:17回答:2

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

c++ dynamic-memory-allocation c++17 variant
2个回答
21
投票

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

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


6
投票

根据cppreference ::std::variant一定不能分配动态记忆。

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

© www.soinside.com 2019 - 2024. All rights reserved.