¿Es esta una manera válida de crear un operador de asignación con miembros que son referencias?Operador de asignación con miembros de referencia
#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;
}
}
Parece compilar y ejecutar bien, pero con C++ superficie de tendencia a un comportamiento indefinido cuando menos se espera, y todas las personas que dicen que es imposible, me parece que una de gotcha echaba de menos. ¿Yo me perdí algo?
Por cierto, los argumentos a 'operador =' y el constructor de copia deben ser referencias const. –
La corrección puede estar limitada a los tipos de diseño estándar, ya que con los virtuales 'este' no necesita ser un puntero al comienzo del bloque de memoria. –
Si necesita hacer esto, le sugiero que reconsidere el uso de referencias. – bames53