c++ dynamic-memory-allocation c++17 variant

c++ - ¿Está permitido std:: variant para asignar memoria a sus miembros?



dynamic-memory-allocation c++17 (2)

Me preguntaba si una implementación de std::variant debe ser necesariamente "plana" o si se le permite asignar dinámicamente memoria a sus miembros, de modo que una secuencia de variantes degeneraría en una secuencia de punteros, destruyendo así la localidad de caché.


De acuerdo con cppreference ::std::variant no se debe asignar memoria dinámica.

Al igual que con las uniones, si una variante contiene un valor de algún tipo de objeto T, la representación del objeto de T se asigna directamente dentro de la representación del objeto de la variante misma. La variante no está permitida para asignar memoria adicional (dinámica).


No, muy explícitamente. De [variant.variant] :

Cualquier instancia de variant en un momento dado tiene un valor de uno de sus tipos alternativos o no tiene ningún valor. Cuando una instancia de variant contiene un valor de tipo alternativo T , significa que un valor de tipo T , denominado valor contenido del objeto de variante, se asigna dentro del almacenamiento del objeto de variant . No se permite que las implementaciones usen almacenamiento adicional, como memoria dinámica, para asignar el valor contenido. El valor contenido se asignará en una región del almacenamiento de variant adecuadamente alineado para todos los tipos en Types... Se define por la implementación si se admiten tipos sobre alineados.