Обработка удаления двух объектов Shared_ptr, содержащих друг друга.C++

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

Сообщение Anonymous »

Итак, в настоящее время в нашем проекте есть код, содержащий 2 класса, каждый из которых содержит объектshared_ptr другого:

Код: Выделить всё

Class A
{
private:
std::shared_ptr mB;
public:
void init()
{
mB = std::make_shared();
mB->setA(this);
}
};

Class B
{
private:
std::shared_ptr mA;
public:
void setA(shared_ptr a)
{ mA = a; }
};

int main()
{
shared_ptr objA = std::make_shared();
}

И вы можете догадаться: когда программа завершает работу и вызывает удаление объекта objA, она затем вызывает удаление B, и продолжает, и продолжает, и приложение аварийно завершает работу.< /p>
Как лучше всего решить эту проблему без большого количества рефакторинга кода? Пример кода приветствуется, так как я плохо разбираюсь в умных указателях.
Большое спасибо!
Я попытался немного реорганизовать код, используя слабый_ptr для мБ в классе А, но видимо я сделал что-то не так, приложение вылетает при запуске.

Подробнее здесь: https://stackoverflow.com/questions/787 ... each-other

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