Я просто любопытно, если есть элегантный способ решить следующую задачу в C++:C++ удалить объект, на который ссылается два указателя
У меня есть приложение симулятор, который содержит несколько компонентов, соединенных каналами. Каналами могут быть либо сетевые каналы (необходимы два экземпляра приложения), либо фиктивный локальный канал. Есть два интерфейса: IChannelIn
и IChannelOut
и два соответствующих переменных:
IChannelIn* in;
IChannelOut* out;
DummyChannel
является одновременно IChannelIn
и IChannelOut
. Он просто копирует входные данные для вывода. Существует также TCPChannelIn: public IChannelIn
и отдельно TCPChannelOut: public IChannelOut
.
Теперь, по выбору пользователя, я либо создать один DummyChannel
DummyChannel* d = new DummyChannel;
in = d;
out = d;
или два отдельных объекта: in = new TCPChannelIn; out = new TcpChannelOut
Вопрос заключается в том: что деструктор должен делать?
~App::App()
{
delete in;
delete out;
}
завершается с ошибкой, потому что delete in;
удалены также фиктивный канал d
так что delete out
удалений уже удалили вещь.
Есть ли элегантный способ из этого?
Спасибо за ваш ответ, это привело меня к правильному пути. Необходимо восстановить ресурсы так же, как и выделенные. Поэтому я сохраню отдельный список всех каналов, выделенных симулятором, и уничтожу объекты из списка. входы и выходы будут просто не владеющими указателями. – danatel