std :: vector push_back()删除前一个元素

时间:2015-12-26 11:22:23

标签: c++ c++11 vector

我有一个班级“地形”(每个特殊功能都被定义 - 我很绝望)

所以,当我逐个定义对象时,一切正常,但是当它涉及多个对象时它是无效的。所以我做了一个std :: vector of my terrain。

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 个答案:

答案 0 :(得分:1)

向量正在重新分配其存储,因此它基本上分配一个新数组,复制当前内容(因此调用对象1的副本),在结尾存储新值并释放旧存储阵列(因此析构函数调用内容)。如果您的调试打印输出显示正在构建/销毁的对象的地址,您将看到它们位于不同的位置。