Является ли это допустимым способом создания оператора присваивания с элементами, которые являются ссылками?
#include <new>
struct A
{
int &ref;
A(int &Ref) : ref(Ref) { }
A(const A &second) : ref(second.ref) { }
A &operator =(const A &second)
{
if(this == &second)
return *this;
this->~A();
new(this) A(second);
return *this;
}
}
Кажется, он компилируется и работает нормально , но из-за тенденции C ++ проявлять неопределенное поведение, когда его меньше всего ожидали, и всех людей, которые говорят, что это невозможно, я думаю, что есть кое-что, что я пропустил. Я что-то пропустил?