Давайте go к коду:
extern "C" {
#include "pod-struct-T.h"
#include "malloc-and-initialize-one-T.h"
}
struct TCpp : T
{
TCpp()
{
T* ptr_t = malloc_and_initialize_one_T();
T* this_t = static_cast<T*>(this);
std::memcpy(this_t, ptr_t, sizeof(T));
free(ptr_t);
}
};
Сколько UB есть в этом фрагменте кода (для C ++ 03 и C ++ 11; или для C ++ 20, если что-то изменилось после пересмотра модели памяти) или что memcpy
это нормально? В случае, если это UB, это хотя бы переносимо среди основных компиляторов? (g cc, clang, intel, et c).
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : Да, я знаю ..., это уродливо, но не спрашивайте, зачем мне это нужно это.