簡體   English   中英

關於C ++指針

[英]About C++ pointers

我很好奇這種情況下如何處理數據:

chapterlist.clear();
cScene newscene;
newscene.name = "Laura does something.";
newscene.words = 432;
newscene.pov = "Laura";
cChapter newchapter;
newchapter.scenelist.push_back(newscene);
chapterlist.push_back(newchapter);

章列表是cChapter矢量。

我正在創建一個新的cScene對象,並將其推到新的cChapter對象的場景列表矢量上,然后將其推到ChapterList上。

我的問題是:當我將對象推到向量上時,是否將所有數據都復制到向量中,而當作用域結束時舊數據會從堆棧中銷毀?

還是正在發生其他事情???

PS:我討厭指針,很多也一樣。

當您將某些內容推入向量時,將使用復制構造函數復制對象。 初始對象的生存期將與向量內部構造的對象的生存期完全斷開。

我的問題是:當我將對象推到向量上時,是否將所有數據都復制到向量中,而當作用域結束時舊數據會從堆棧中銷毀?

是。

PS:我討厭指針,很多人也討厭

好吧,也不要嘗試,內存只是一個巨大的字節數組:)指針只是該巨大數組的索引。 當您繞開它們的頭時,您會嘲笑它們多么簡單:)

C ++標准在第23章“ 容器”庫中聲明a.push_back(x)具有操作語義a.insert(a.end(), x) 此外,還指出a.insert(p, t)在p之前插入a.insert(p, t)的副本。

因此,可以將副本插入到向量中。

假設你有類似的東西

struct cScene {...};
struct cChapter {
    std::vector<cScene> scenelist;
}

則完全不涉及任何指針,並且復制到場景列表中的條目將被復制,場景列表中的每個元素在cChapter被破壞時都會被破壞。

如果你有

struct cChapter {
    std::vector<cScene*> scenelist;
}

並使用

cScene * newscene = new cScene;
newchapter.scenelist.push_back(newscene);

然后將指針復制,因此您現在擁有兩個指向同一內存位置的單獨指針,並且需要進行所有生命周期管理。 如果cScene元素很大,並且您不想復制std :: vector的開銷,請看一下boost的智能指針

復制包含向量的對象時,向量將被完全復制。

您的問題的答案是肯定的:原始數據將被復制到向量內部的新結構中,然后在堆棧末尾銷毀。

但是不要太擔心。 在這里,您使用的結構非常苗條:兩個char指針和一個整數。 您應該可以很好地復制它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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