[英]std::vector push_back() erases previous element
我有一个“地形”类(定义了每个单个特殊功能-我很拼命)
因此,当我一一定义对象时,一切工作正常,但涉及多个对象时,效果不佳。 所以我做了一个std :: vector我的地形。
std::vector<terrain> defined_terrains;
一切看起来都很好,我有一个可以打印对象所有内容的函数。 所以我做:
defined_terrains.push_back({args...})
defined_terrains[0].print_data();
上面的代码是这样的:
/// push_back starts
COPY CSTR: object test 1
DSTR: object test 1
/// push_back finishes
/// print_data starts
Data:
name: object test 1
id: 1003
hitbox:
{
-0.0520833
-0.078125
-0.0520833
0.078125
0.0520833
0.078125
0.0520833
-0.078125
}
frames:
{
-0.0520833
-0.078125
-0.0520833
0.078125
0.0520833
0.078125
0.0520833
-0.078125
}
RGB:
{
0.392157
0.784314
0.196078
}
offset:
x: 0.104167
y: -0.3125
on ground: no
fall time: 0
direction 1
destructible: 0
transparent: 0
grounding:
left limit: 0
right limit: 0
blocked from above: 0
/// print_data finishes
一切都很完美。 但是然后我将下一个元素添加到std :: vector:
defined_terrains.push_back({args...})
defined_terrains[1].print_data();
有时候是这样的:
*everything the same for object test 1*
/// push_back starts
COPY CSTR: object test 2
COPY CSTR: object test 1 <----- why does this happen? defined_terrains[0] was not involved here
DSTR: object test 1 <----------- its like defined_terrains[1] used defined_terrains[0] like temporary (???)
DSTR: object test 2
/// push_back finishes
/// print_data starts
name: object test 2
id: 1004
hitbox:
{
-0.0520833
-0.078125
-0.0520833
0.078125
0.0520833
0.078125
0.0520833
-0.078125
}
frames:
{
-0.0520833
-0.078125
-0.0520833
0.078125
0.0520833
0.078125
0.0520833
-0.078125
}
RGB:
{
0.392157
0.784314
0.196078
}
offset:
x: -0.104167
y: -0.390625
on ground: no
fall time: 0
direction 1
destructible: 0
transparent: 0
grounding:
left limit: 0
right limit: 0
blocked from above: 0
/// print_data finishes
我是傻还是什么? 还是push_back()有严重的错误?
向量正在重新分配其存储,因此它基本上是在分配一个新的数组,复制当前内容(因此调用对象1的复制ctor),将新值存储在末尾,然后释放旧的存储数组(因此内容的析构函数调用)。 如果您的调试打印输出显示了正在构造/销毁的对象的地址,您会发现它们位于不同的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.