我想知道在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
删除了已经被删除的东西。
有没有一种优雅的解决方法呢?