jam*_*o00 12 c++ stl reference vector
关于STL容器(vector,list,map ...)如何存储值,我总是有点困惑.他们存储对我传入的值的引用,还是复制/复制构造+存储值本身?
例如,
int i;
vector<int> vec;
vec.push_back(i);
// does &(vec[0]) == &i;
Run Code Online (Sandbox Code Playgroud)
和
class abc;
abc inst;
vector<abc> vec;
vec.push_back(inst);
// does &(vec[0]) == &inst;
Run Code Online (Sandbox Code Playgroud)
谢谢
Mic*_*val 18
STL容器复制 - 构造和存储您传入的值.如果您想将对象存储在容器中而不复制它们,我建议在容器中存储指向该对象的指针:
class abc;
abc inst;
vector<abc *> vec;
vec.push_back(&inst);
Run Code Online (Sandbox Code Playgroud)
这是实现容器类的最合理的方法,以防止在已失效的堆栈帧上意外地存储对变量的引用.考虑:
class Widget {
public:
void AddToVector(int i) {
v.push_back(i);
}
private:
vector<int> v;
};
Run Code Online (Sandbox Code Playgroud)
存储引用i将是危险的,因为在从定义它的方法返回后,将引用局部变量的内存位置.