簡體   English   中英

將unique_ptr傳遞給將其添加到向量的函數

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

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