簡體   English   中英

創建由shared_pointers向量的元素指向的對象的副本

[英]Create a copy of objects pointed to by elements of a vector of shared_pointers

我有一個類customClass1 ,其屬性為std::vector<std::shared_ptr<customClass2>>

如何復制customClass1對象,該對象包含指向第一個std::vector<std::shared_ptr<customClass2>>的元素所指向的對象的相同副本的指針?

不想只是讓包含在矢量指針的副本。 我實際上想復制指針所指向的對象的副本,然后將指向這些新對象的指針存儲在第二個customClass1對象的vector屬性中。

您要做的是遍歷要復制的向量,並創建新的shared_ptr ,其值與要復制的向量中的基礎對象相同。 您可以執行以下操作:

std::vector<std::shared_ptr<customClass2>> original; // this has the data to copy
std::vector<std::shared_ptr<customClass2>> copy;
copy.reserve(original.size()); // prevent reallocations

for (const auto& e : original)
    copy.push_back(std::make_shared<customClass2>(*e));

如果您正在處理多態類型,這將對對象進行切片,因為您有指向基礎的指針,因此僅低音部分會被復制。 如果您使用的是多態類型,則可以創建一個virtual克隆函數並使用clone()復制該對象。 有關更多信息,請參見什么是“虛擬構造函數”? isocpp.org常見問題上

暫無
暫無

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

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