簡體   English   中英

std :: vector push_back()刪除前一個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM