【发布时间】:2014-05-26 14:57:58
【问题描述】:
我有一个继承两个接口的类:
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);
}
但是这些共享指针中的每一个都有单独的引用计数器,它会导致在类销毁时删除已删除的指针,对吗?
- 应该如何治疗?
- 这种情况的最佳做法是什么?
【问题讨论】:
-
看起来您现在应该将 IFoo 和 IBar 分开。 :)
-
@Jerry 我无法将它们分开,因为它们有共同的初始化、共同的发布等,我无法更改。
标签: c++ inheritance multiple-inheritance smart-pointers