父母和孩子的共享指针

时间:2013-12-31 07:49:31

标签: c++ inheritance shared-ptr

我对某些类的初始化有问题。简化代码如下:

class Base
{
    Base(int)
};

class BaseChild : public Base
{
};

class mainWindow
{
    boost::shared_ptr<Base> pBase;
    void init();
};

void mainWindow::init()
{
    this->pBase = boost::shared_ptr<Base>(new Base(12));
    this->pBase = boost::shared_ptr<Base>(new BaseChild(12));
}

所以问题在于BaseChild类的初始化,它是来自Base类的子类。我究竟做错了什么?我认为父类的指针可以指向子类。

通常我的程序必须以这种方式工作:

  • 启动时,会有父类的初始化(在上例中为this->pBase = boost::shared_ptr<Base>(new Base(12));)。这已经有效了。

  • 在某些情况下,当某个标志更改其值时,指向父类对象的指针应更改为指向子类对象。

1 个答案:

答案 0 :(得分:0)

您错过了在int中占用BaseChild的构造函数。 Base中的构造函数也是私有的,这使得它在Base类之外无法使用 尝试

class Base
{
public:
     Base(int);
};

class BaseChild : public Base
{
public:
    BaseChild(int);
};