[英]Passing lambda, which returns polymorphic unique_ptr, as function pointer
[英]Passing a unique_ptr to a function which adds it to a vector
我有一個類,包含一個unique_ptr向量。 該類還有一個向向量添加元素的方法。
class PointerVector
{
public:
void addPointer(std::unique_ptr<int> p);
private:
std::vector<std::unique_ptr<int>> mPointers;
};
addPointer
方法定義:
void PointerVector::addPointer(std::unique_ptr<int> p)
{
mPointers.emplace_back(std::move(p));
}
所以我使用std::move
來轉移指針的所有權。
當我調用addPointer
,我也使用std::move
:
PointerVector pv;
std::unique_ptr<int> i(new i(1));
pv.addPointer(std::move(i));
這是正確的做事方式嗎? 感覺好像一直在打電話給std::move
很麻煩。
編輯 :我實際上想要將unique_ptr的向量保存到類中,但我想先嘗試使用int,以使事情變得更容易。
幾乎。 傳遞臨時數據時,您不需要使用std::move()
,最后一個片段看起來會更好,如下所示(我不是在問為什么您需要存儲指向int而不是int本身的智能指針)。
PointerVector pv;
pv.addPointer(std::unique_ptr<int>(new int(1)));
由於你正在使用emplace_back
直接在向量的末尾構造一個新的unique_ptr<int>
元素,也許最簡單的解決方案是讓你的PointerVector
類封裝整個unique_ptr
管理邏輯並給它一個原始指針:
class PointerVector
{
public:
void addPointer(int* p);
private:
std::vector<std::unique_ptr<int>> mPointers;
};
void PointerVector::addPointer(int* p) {
assert(nullptr != p);
mPointers.emplace_back(p);
}
PointerVector pv;
pv.addPointer(new int(1));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.