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