У меня есть 2 класса: DataObject
и DataElement
. DataObject
содержит указатели на (только) DataElement
s и DataElement
содержит указатели на несколько типов, среди которых DataObject
.C++ проблема с круговой ссылкой
Раньше не будет никаких проблем, так как я использую только указатели на DataObject
с в DataElement
, поэтому вперед декларация DataObject
в заголовке DataElement
достаточно.
Теперь, однако, я пытаюсь добавить деструктор в DataElement
, в котором мне нужно удалить на DataObject
. На этом компилятор говорит:
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.
Как это решить? Первой декларации, по-видимому, недостаточно, в то время как я не могу включить полный заголовок для DataObject
, так как это снова возвращает мне круговую зависимость.
Заранее благодарен!
Рассмотрите возможность использования смарт-указатель, как 'shared_ptr' /' weak_ptr', 'scoped_ptr' или' unique_ptr' (если реализация его поддерживает); они значительно упрощают управление ресурсами на C++ и помогают вам обеспечить безопасность и правильность кода. –