【发布时间】:2016-03-31 23:08:48
【问题描述】:
我有一个“地形”类(每个特殊功能都已定义 - 我很绝望)
所以,当我一个一个地定义对象时,一切正常,但是当涉及到多个对象时它就无效了。所以我为我的地形制作了一个 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() 有严重的错误?
【问题讨论】:
-
关键词:重新分配。
-
把你的代码减到最少,这样就可以重现错误了。没有人愿意阅读整个源代码 :(
-
还有一个:reserve(size_t)
-
阅读量不大。您可以省略 print_data 写入的内容。只是为了检查数据的有效性。