gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:54:34 24 4
gpt4 key购买 nike

我有一个“terrain”类(定义了每个特殊函数 - 我很绝望)

所以,当我一个一个地定义对象时,一切正常,但是当涉及到多个对象时它就无效了。所以我制作了地形的 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() 存在严重错误?

最佳答案

vector 正在重新分配它的存储空间,所以它基本上是在分配一个新数组,复制当前内容(因此调用对象 1 的复制构造函数),在最后存储新值并释放旧存储数组(因此内容的析构函数调用)。如果您的调试打印输出显示正在构造/销毁的对象的地址,您会发现它们位于不同的位置。

关于c++ - std::vector push_back() 删除前一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34470847/

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