El siguiente fragmento de código tiene una pérdida de memoria que pasé demasiado tiempo persiguiendo. El problema es que dentro de Foo(), la variable local x_ oculta la variable miembro x_. También es bastante molesto, porque el compilador podría haberme advertido al respecto. ¿Hay una bandera en GCC para tal advertencia? (Para los curiosos: He llegado al código erróneo usando primero una variable local, a continuación, cambiar a una variable miembro, pero olvidando para eliminar la declaración de tipo.)¿Advertencia sobre la ocultación de variables de miembro?
struct A {
A() x_(NULL) {}
~A() {
delete x_;
}
void Foo() {
HugeThingy* x_ = new HugeThingy();
x_->Bar("I. Need. Garbage. Collection. Now.");
}
HugeThingy* x_;
DISALLOW_COPY_AND_ASSIGN(A); // Macro to prevent copy/assign.
}
Varias personas han mencionado que debe utilizar simplemente un objeto de cadena simple en lugar de un puntero y una asignación dinámica, y tienen razón. Si (como sospecho) realmente quieres saber cómo hacer que el compilador te advierta cuando declaras una variable local que oculta una variable miembro, te sugiero aclarar tu pregunta. –
Como tiene el puntero como variable miembro, recuerde proporcionar el constructor Copia y el operador Asignación. –
Si no los proporciona, al menos suprima los valores predeterminados. –