我有一个继承了两个接口的类:
class Multi : public IFoo, public IBar {
public:
virtual ~Multi();
// Foo part
virtual void fooMethod();
// ...
// Bar part
virtual void barMethod();
// ...
};
很不幸,这个类不能被分解成每个接口的两个独立类。实际上,在类的实现中,这些实体(Foo和Bar)是紧密耦合的,但在未来它们可能会变成独立的。
另一个类想要使用Multi类,拥有指向IFoo和IBar的指针:
class ClientClass {
public:
ClientClass(); // constructor
// smth
private:
std::shared_ptr<IFoo> foo_;
std::shared_ptr<IBar> bar_;
};
在构造函数中我会做类似以下的事情:
ClientClass::ClientClass(){
auto pMulti = new Multi;
foo_ = std::shared_ptr<IFoo>(pMulti);
bar_= std::shared_ptr<IBar>(pMulti);
}
但是每个共享指针都有单独的引用计数器,这会导致在类销毁时删除已经被删除的指针,我说的对吗?
- 我应该如何处理它?
- 在这种情况下,最佳实践是什么?