采取以下代码
void save(){
Classname object(aString, aInt);
this->getVector().push_back(&object);
}
我正在尝试将此对象的副本保存到此类的向量中,但我知道这不起作用,因为一旦我离开save(),对象将被删除,所以我的问题是如何做我解决这个问题?我会很感激一些代码示例,因为我正在从java迁移,可能不了解这个指针的一些技巧。
编辑:英语 edit2:复制粘贴从不起作用!
答案 0 :(得分:1)
首先,不需要this->
,你可以说
getVector().push_back(...);
其次,由于您使用了this->
,我推断save
和getVector
是同一个类的两个成员函数;如果所有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*>
}