2016-07-05 6 views
1

Пусть у меня есть класс A:ли это определено

class A : virtual SomeOtherClass{ 
    //Stuff here 
}; 

Предположим, что у меня есть сделать это где-то:

A thing; 
alignas(A) uint8_t arr[sizeof(A)]; 
for (int x = 0; x < sizeof(A); x++) 
{ 
    //Copy into array 
    arr[x] = reinterpret_cast<uint8_t*>(&A)[x]; 
} 

A* otherThing = reinterpret_cast<A*>(arr); 

это то, что я делаю здесь определено поведение, или я убиваю себя в некоторым образом что я не знаю?

+1

'reinterpret_cast' почти всегда плохая идея. –

ответ

2

Показанный код выполняет то, что эквивалентно memcpy().

Как таковой, this is undefined behavior. Классы с виртуальными базовыми классами не являются тривиально-копируемыми.