Сосредоточив внимание на функции main
, поскольку это должно указывать на предполагаемую семантику, существуют две большие проблемы: во-первых, вы не выделяете память, что означает, что если компилятор обработает код, он вызовет UBпопробуйте вызвать конструктор Test
по адресу NULL
в новой операции размещения.
Другая проблема хорошо известна пользователям std::auto_ptr
: подпись конструктора копирования принимает нессылка const, и это означает, что вы не можете вызвать ее для объекта const. С другой стороны вы пытаетесь вызвать конструктор копирования внутри шаблона Copy
, который обещал не изменять объект, на который ссылаетсяВторой аргумент:
template <typename T>
void Copy( T* p, T& o ) {
new (p) T( o ); // would work, object is non-const
}
Наконец, я не уверен, если это связано с копированием в вопрос, но я не уверен, каковы ваши намерения с классом эталонной оболочки, который вы предоставляете в начале, поэтомуВы можете уточнить.