Qué reglas determinan si un objeto es trivialmente copiable

Con la introducción de c ++ 11,trivialmente copiable se ha vuelto bastante relevante. Lo más notable en el uso de 'std :: atomic'. Los conceptos básicos son bastante simples. Una clasefoo es trivialmente copiable si:

foo* src = new foo();
foo* dest = malloc(sizeof(foo));
memcpy(dest, src, sizeof(foo));

Tiene el mismo efecto que:

foo* src = new foo();
foo* dest = new foo(src);

Entonces, un objeto donde copiar la memoria tendrá el mismo efecto que un constructor de copias. Sin embargo, por supuesto, hay una trampa. No solo hay constructores de copia. Pero también mueva constructores, mueva operadores de asignación. Etc.

std :: is_trivially_copyable se puede usar para probar si un objeto es trivialmente copiable. Entonces, con prueba y error, es posible hacer que un objeto sea copiable trivialmente.

Pero, por supuesto, un conjunto de reglas bien definido sería un poco más agradable :). Así que por la presente mi solicitud.

Respuestas a la pregunta(1)

Su respuesta a la pregunta