Очистка указателей, не владеющих объектом, после уничтожения объектаC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Очистка указателей, не владеющих объектом, после уничтожения объекта

Сообщение Гость »


Обычно я обнаруживаю, что этот фрагмент проникает в мой код, где два объекта, которые не владеют друг другом, должны иметь указатель друг на друга, и этот указатель должен быть «очищен» после уничтожения одного из них следующим образом.
р>
структурная панель; структура Фу; структура foo { бар* bar_item = nullptr; ~фу(); }; структурная панель { foo* foo_item = nullptr; ~бар() { если (foo_item) { foo_item->bar_item = nullptr; } } }; фу::~фу() { если (бар_элемент) { bar_item->foo_item = nullptr; } } интервал основной() { фу объект1; бар объект2; obj1.bar_item = &obj2; obj2.foo_item = &obj1; } Проблема в том, что мне тоже нужно это сделать
[*]удалить конструктор/назначение копирования и реализовать конструктор/назначение перемещения (много шаблонного шаблона, ожидайте не менее 5 членов в каждом классе) [*]преобразуйте все объекты в общий_ptr, и объекты будут иметь слабый_ptr по отношению друг к другу. (возможно, это не всегда осуществимо, поскольку я не могу владеть временем жизни объектов, что также заставляет меня использовать кучу)
Есть ли способ избежать этого? упростить? иметь оболочку RAII для конкретного члена, чтобы избежать реализации операций копирования/перемещения?

простой пример, с которым я когда-то столкнулся, — это графическая система, где мне нужна линия, соединяющая две сферы, линия должна иметь указатели на обе сферы, а сферы должны иметь указатель на линию, все они принадлежат "сцена", но запрос "сцены" о них требует длительного поиска, указатели избегают этого поиска.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»