向量中的不同实例
Different instance inside a vector
最近我一直在试图找出一种奇怪的行为。
假设我有一个具有POD属性的类:
typedef struct {
int a;
vector<int> b;
} Foo;
class Bar {
public:
Foo foo;
Bar(void);
void increase(void);
};
Bar::Bar(void) {
foo.a = 0;
}
void Bar::increase(void) {
foo.a++;
foo.b.push_back(foo.a);
}
如果我创建一个Bar的简单实例并使用它,这是没有问题的,但当我将它添加到向量中并通过迭代器访问它时,它会访问不同的内存位置。例如:
Bar bar1, bar2; // foo.a = 0
bar1.increase(); // foo.a = 1
vector<Bar> data({bar1, bar2});
data.begin()->increase() // foo.a = garbage ??
当一开始访问迭代器时,我希望访问bar1实例和foo属性中的a字段,并将1作为值,但它访问了一个带有垃圾的不同内存位置。
为什么会发生这种情况?
std::vector
在调用push_back
时生成自己的对象副本
如果你想保持相同的对象,可以尝试一个指针向量(或者智能指针,如果你不想担心以后整理内存的话)
相关文章:
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 如何检查类实例向量的索引是否为空
- 有什么方法可以将具有不同模板参数的模板类实例放入向量中?
- 当函数返回C++向量实例时,它正在运行
- 为什么我不能更改实例化对象内部的向量?
- 在两个类实例之间共享向量
- 在使用标准向量函数时引发'std::bad_alloc'实例后调用的终止
- 从新实例的向量中检索数据返回 0
- 基类中向量的干净实例化
- 在向量中存储实例
- 类实例的C++/向量作为另一个类的属性
- 没有操作员=的类型向量的实例化
- 是否可以使用将不同参数传递给构造函数的类的不同实例初始化向量
- 向量映射作为实例成员的C 地图
- make_pair并push_back基指针,并实例化基指针的向量
- 尝试使用两个单独的 getline() 实例来填充两个单独的向量
- C -STD ::向量没有超载函数的实例
- 对成员变量的引用在向同一向量中添加另一个实例后断开
- (C++)用于实例化新对象并将其分配给指向相同对象类型的指针的 2D 向量的语法
- GDB监视实例向量中的类成员