J'ai une classe qui utilise un mécanisme de comptage de référence. Les objets de cette classe sont finalement détruits en appelant delete this
lorsque le nombre de références tombe à zéro. Ma question est: puis-je utiliser la variable locale sur la pile après delete this
? Voici un exemple plus précis:Accéder à une variable locale après "supprimer ceci"
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();
}
};
objets en référence comptent eux-mêmes est une mauvaise idée (peut-il dire si Il s'agit d'une variable de durée de vie statique (pile) ou de durée de vie dynamique (tas) .C'est ainsi que fonctionne COM et des expériences acquises par la communauté C++ sur laquelle nous avons évolué, comme le montre boost :: shared_ptr où le nombre de références est –
@MartinYork Je suis d'accord avec vous: dans un cas général, je ne me conseillerais pas de mettre en place un tel système. comptage de référence. C'est un cas spécial cependant. Heureusement, dans ma situation réelle, le constructeur n'est pas public et la création est protégée par un objet usine. – FireAphis