我有一个带有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);
答案 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>());