class A;
class B {
public:
B(A& a) : a(a) {}
private:
A& a;
};
/* Method 1 */
/* warning C4355: 'this' : used in base member initializer list */
/*
class A {
public:
A() : b(*this) {}
private:
B b;
};
*/
/* Method 2 */
/* But I need to manually perform memory dellocation. */
class A {
public:
A() { b = new B(*this); }
~A() { delete b; }
private:
B* b;
};
int main() {
}
En la actualidad, cuando intento inicializar la referencia en B, estoy usando el método 1. Sin embargo, el método 1 voluntad bandera advirtiéndome cuales es entendible.Iniciar una referencia - C4355 advertencia: 'esto': se utiliza en lista de inicialización miembro de base
Por lo tanto, tengo que recurrir al método 2, mediante la asignación dinámica de memoria.
¿Hay alguna manera mejor que pueda usar, sin la necesidad de asignación/asignación de memoria manual (OK, conozco el puntero inteligente)?
Prefiero el Método 1, solo que no me siento cómodo con la advertencia.