Soy un poco nuevo en C++ y he estado haciendo programación en Obj-C y Java hasta ahora.C++: sobre gestión de memoria
decir que tengo una clase:
class Person {
private:
Wife *current_wife;
//.....
};
Así OBV I necesidad de implementar un método de selección para cambiar la variable de instancia esposa.
De esta manera:
Person::SetCurrentWife (Wife *new_wife) {
current_wife = new_wife;
}
Eso sería una copia shalllow.
Así que en algún lugar del bucle principal o algo que llamo:
Person *some_person = new Person();
...
Wife *wife = new Wife();
some_person->SetCurrentWife(wife);
Así que estoy confundido: ¿habrá una pérdida de memoria en esta lista? ¿Debo eliminar el objeto esposa aquí o en el destructor de la persona? En Obj-C liberaría a la esposa actual y luego enviaría un mensaje de retención a la esposa del objeto anterior, pero ¿cuál es la forma correcta de hacer métodos setter en C++?
Dado que eres nuevo en C++, sigue este consejo: nunca uses 'new',' delete' o punteros. Como excepción, * puede * usar 'new' dentro del constructor de un puntero inteligente, pero solo después de haber determinado que realmente necesita almacenamiento dinámico. –
Kerrek se olvidó de recomendar [un buen libro introductorio de C++] (http://stackoverflow.com/q/388242/46642) :) –
En OO no necesita un setter, necesita funciones para dejar que el objeto haga algo (divorcio, nuevo casamiento). Los setters pueden ser convenientes, no son obvios. – stefaanv