【问题标题】:Polymorphism through boost shared_ptr?通过 boost shared_ptr 实现多态性?
【发布时间】:2013-11-21 09:21:16
【问题描述】:

我有一个类层次结构,其中一个抽象父 (A) 类有两个子 (B 和 C)。

这些类的重点是返回一个 boost::shared_ptr,它指向另一个类层次结构。返回的对象正在初始化一个数据成员。 Other 是 OtherB 和 OtherC 的父类。

//A.h
class A{
public:
    virtual boost::shared_ptr<Other> getMemManagedPolyObject();

private:
};

//B.cpp

boost::shared_ptr<Other> B::getMemManagedPolyObject(){
    return boost::shared_ptr<Other>(new OtherB());
}

//C.cpp
boost::shared_ptr<Other> C::getMemManagedPolyObject(){
    return boost::shared_ptr<Other>(new OtherC());
}

但我收到错误提示我无法执行此操作。如何绕过限制来实现相同的行为?

【问题讨论】:

  • return boost::shared_ptr&lt;Other&gt;(new OtherB);
  • @KerrekSB 这可能是因为你使用了 std::shared_ptr 而我使用了 boost?
  • @user997112:我对此表示怀疑。两者非常相似。

标签: c++ inheritance boost polymorphism


【解决方案1】:

如果您显示OtherBOtherC 的内容会有所帮助,但如果被实例化的类具有私有析构函数(这通常是一个好的设计决策),我在std::shared_ptr 上也遇到过类似的问题。您可以通过将new 的结果显式转换为Other* 来解决此问题,然后再将其传递给boost::shared_ptr&lt;Other&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多