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