Ho una classe che utilizza un meccanismo di conteggio dei riferimenti. Gli oggetti di questa classe vengono infine distrutti chiamando lo delete this
quando il conteggio dei riferimenti scende a zero. La mia domanda è: posso usare la variabile on-stack locale dopo lo delete this
? Ecco un esempio più specifico:Accesso a una variabile locale dopo "Elimina questo"
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();
}
};
oggetti riconducibili contarsi è una cattiva idea (Può dire se è una durata di vita statica (stack) o variabile dinamica (heap) variabile. Ecco come funziona la COM e dalle esperienze maturate dalla comunità C++ che abbiamo spostato, come si può vedere da boost :: shared_ptr dove il numero di riferimenti è non fa parte dell'oggetto oggetto di referenza contato –
@MartinYork Sono d'accordo con te In un caso generale non mi consiglierei di implementare tali conteggio dei riferimenti. Questo è un caso speciale però. Fortunatamente, nella mia situazione reale, il costruttore non è pubblico e la creazione è protetta da un oggetto fabbrica. – FireAphis