有没有办法通过使用指针解决范围?

时间:2013-12-08 02:08:31

标签: c++ pointers scope

采取以下代码

void save(){
    Classname object(aString, aInt);
    this->getVector().push_back(&object);
}

我正在尝试将此对象的副本保存到此类的向量中,但我知道这不起作用,因为一旦我离开save(),对象将被删除,所以我的问题是如何做我解决这个问题?我会很感激一些代码示例,因为我正在从java迁移,可能不了解这个指针的一些技巧。

编辑:英语 edit2:复制粘贴从不起作用!

1 个答案:

答案 0 :(得分:1)

首先,不需要this->,你可以说

getVector().push_back(...);

其次,由于您使用了this->,我推断savegetVector是同一个类的两个成员函数;如果所有getVector都允许访问同时也是类成员的向量(没有像懒惰实例化那样的任何技巧),那么你也不需要它,你可以直接处理向量:

theVector.push_back(...)

现在回答你的问题。你没错,object将超出范围 - 如果它在堆栈上。但是你可以在堆上动态地构造它,它将一直存在直到被删除:

void save(){
    Classname *ptr = new Classname(aString, aInt);
    theVector.push_back(ptr);
}

现在ptr将超出范围,但添加到向量的ptr副本不会, 指针仍会指向该对象。

由于你想使用多态,我想你希望向量包含基类指针,这些指针实际上可以指向派生类的对象。没问题:

void save(){
    Animal *ptr = new Aardvark(aString, aInt);
    theVector.push_back(ptr);   // <-- the vector is of type vector<Animal*>
}