gpt4 book ai didi

c++ - STL:存储引用或值?

转载 作者:IT老高 更新时间:2023-10-28 23:12:57 24 4
gpt4 key购买 nike

我一直对 STL 容器( vector 、列表、 map ...)如何存储值感到有些困惑。他们是存储对我传入的值的引用,还是他们自己复制/复制构造+存储值?

例如,

int i;
vector<int> vec;
vec.push_back(i);
// does &(vec[0]) == &i;

class abc;
abc inst;
vector<abc> vec;
vec.push_back(inst);
// does &(vec[0]) == &inst;

谢谢

最佳答案

STL Containers 复制构造并存储您传入的值。如果您想将对象存储在容器中而不复制它们,我建议在容器中存储指向该对象的指针:

class abc;
abc inst;
vector<abc *> vec;
vec.push_back(&inst);

这是实现容器类的最合乎逻辑的方式,以防止意外地将对已失效堆栈帧上的变量的引用存储。考虑:

class Widget {
public:
void AddToVector(int i) {
v.push_back(i);
}
private:
vector<int> v;
};

存储对 i 的引用会很危险,因为在从定义局部变量的方法返回后会引用局部变量的内存位置。

关于c++ - STL:存储引用或值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com