J'ai 2 classes: DataObject
et DataElement
. DataObject
contient des pointeurs vers (seulement) DataElement
s, et un DataElement
contient des pointeurs vers plusieurs types, parmi lesquels un DataObject
.Problème de référence circulaire C++
Ceci etait pas de problème, puisque je n'utilise que des pointeurs vers DataObject
s dans DataElement
, donc une déclaration avant de DataObject
dans l'en-tête de DataElement
suffit.
Maintenant, cependant, j'essaie d'ajouter un destructeur à DataElement
, dans lequel j'ai besoin d'une suppression sur un DataObject
. Sur ce le compilateur dit:
dataelement/destructor.cc: In destructor ‘DataElement::~DataElement()’:
dataelement/destructor.cc:8: warning: possible problem detected in invocation of delete operator:
dataelement/destructor.cc:8: warning: invalid use of incomplete type ‘struct DataObject’
dataelement/dataelement.h:7: warning: forward declaration of ‘struct DataObject’
dataelement/destructor.cc:8: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.
Comment puis-je résoudre ce problème? Une déclaration avant n'est apparemment pas suffisante, alors que je ne peux pas inclure l'en-tête complet pour DataObject
, car cela me donne une dépendance circulaire à nouveau.
Merci d'avance!
l'aide d'un pointeur Tenir compte intelligent comme 'shared_ptr' /' weak_ptr', 'scoped_ptr' ou' unique_ptr' (si elle prend en charge l'implémentation); Celles-ci rendent la gestion des ressources en C++ beaucoup plus facile et vous aident à vous assurer que le code est une exception sûre et correcte. –