簡體   English   中英

具有 unique_ptr 的結構向量

[英]Vector of structs with unique_ptr

我已經閱讀了許多類似問題的答案,但仍然找不到我的問題的解決方案。

我有結構:

struct Param {
    std::string name;
    std::unique_ptr<Object> default_val;
};

我有存儲Param向量的 class Function 我在某個地方創建了這個參數的向量,並需要將它傳遞給Function構造函數。

問題出在我試圖將向量傳遞給構造函數的那一刻。 我知道我需要移動所有unique_ptr ,我就這樣做了。

也許我錯過了一些非常簡單的東西?

Code snippets

Function

using Params = std::vector<Param>;

class Callable : public Object {
public:
    Callable(const Params & params) : params(params) {}
// ...
private:
    Params params;
}

我創建向量的代碼:

Params params;
for(auto & p : func_decl->params){
    auto default_val = eval(p.default_val.get());
    Param p(p.id->get_name(), std::move(default_val));
    params.push_back(std::move(p));
}

是否可以不在這里使用shared_ptr

output 是: error: use of deleted function 'Param::Param(const Param&)'

Param是不可復制的,因為它的一個成員不是。 由於向量與其內容一樣可復制,因此Param的向量不可復制。

當你這樣做時:

Callable(const Params & params) : params(params) {}

您正在嘗試使用向量的復制構造函數 那不會編譯。

您需要移動輸入向量,這將同時移動其內容。 這意味着更改構造函數,使其采用右值引用,並使用std::move移動向量。

Callable(Params&& params) : params(std::move(params)) {}

暫無
暫無

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

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