Tengo una clase que emplea un mecanismo de recuento de referencias. Los objetos de esta clase se destruyen eventualmente llamando al delete this
cuando el recuento de referencia cae a cero. Mi pregunta es: ¿puedo usar la variable local en la pila después de delete this
? Aquí hay un ejemplo más específico:Acceder a una variable local después de "eliminar esto"
class RefCountedClass
{
public:
RefCountedClass(Mutex& m) :
mutex_(m)
{}
.
.
.
private:
Mutex& mutex_;
void RemoveReference()
{
// As I understand, mutex_ will be destroyed after delete,
// but using m is all right because it is on-stack and
// references an external object. Am I right?
Mutex& m = mutex_;
m.Acquire();
--recount_;
if (refcount <= 0) delete this;
m.Release();
}
};
tener objetos contarse es una mala idea (¿Puede decir si es una variable de vida estática (pila) o vida útil dinámica (montón). Así es como funciona COM y de las experiencias adquiridas por la comunidad C++ hemos avanzado, como se puede ver en boost :: shared_ptr donde el recuento de referencia es no es parte del objeto que se está considerando. –
@MartinYork Estoy de acuerdo contigo. En un caso general, no me aconsejaría implementar tales recuento de referencia. Este es un caso especial sin embargo. Afortunadamente, en mi situación real, el constructor no es público y la creación está protegida por un objeto de fábrica. – FireAphis