指针传染媒介对对象c ++的

时间:2014-03-28 16:28:48

标签: c++ pointers vector

我有一个带有2个派生类的基类,另一个用于存储派生类类型的对象:

class X
{};

class X1 : public X
{};

class X2 : public X
{};

class Y
{
std::vector<X*> V;
};

为什么这种在V中引入元素的方法不起作用?

X1 object;
X *ptr = &object;
V.push_back(ptr);

1 个答案:

答案 0 :(得分:3)

我想您已将示例代码放在类Y的函数中,并且可以访问类成员变量V。 返回函数时,指向本地声明的object变量的指针无效。您可以通过从堆中分配对象来解决此问题:

X *ptr = new X();
V.push_back(ptr);

甚至更好,而不是使用原始指针,如果可能的话,使用智能指针,例如:

class Y {
    std::vector<std::shared_ptr<X> > V;
};

V.push_back(std::make_shared<X>());