通过boost shared_ptr进行多态性?

时间:2013-11-21 09:21:16

标签: c++ inheritance boost polymorphism

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

这些类的重点是返回一个boost :: shared_ptr,它引用另一个类hirarchy。返回的对象是初始化数据成员。其他是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());
}

但我得到的错误表明我不能这样做。如何绕过限制来实现相同的行为?

1 个答案:

答案 0 :(得分:0)

如果您展示了OtherBOtherC的某些内容会有所帮助,但如果实例化的类具有私有析构函数(通常是std::shared_ptr,我会遇到new的类似问题一个好的设计决定)。您可以通过明确地将Other*的结果投放到boost::shared_ptr<Other>,然后再将其传递给{{1}}来解决此问题。