通过boost shared_ptr的多态性

Polymorphism through boost shared_ptr?

本文关键字:多态性 ptr boost shared 通过      更新时间:2023-10-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());
}

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

如果您展示了OtherBOtherC的一些内容,这将有所帮助,但我在std::shared_ptr中也遇到过类似的问题,如果正在实例化的类具有私有析构函数(这通常是一个很好的设计决策)。您可以通过在将new的结果传递给boost::shared_ptr<Other>之前将其显式强制转换为Other*来解决此问题。