錯誤:使用已刪除的函數 std::unique_ptr

馬克斯·佩格拉-威利斯

我正在嘗試將 unique_ptr 傳遞給自定義向量類,但我收到主題標題中的錯誤。

我知道你不能複制 unique_ptr ,所以我在傳遞它時嘗試使用 std::move() ,但這似乎並沒有解決我的問題......我哪裡出錯了?

提前致謝

template<typename T>
class VectorSelectable {
public:
    void Add(const T& v) { 
        m_Items.push_back(move(v)); 
    }
private:
    vector<T> m_Items;
};

class FunctionType {
    int m_Data;
};

int main()
{
    VectorSelectable<unique_ptr<FunctionType>> vec;
    vec.Add(move(make_unique<FunctionType>()));
    return 0;
}

編輯:將 'const' 添加到 'Add(const T& v)'

無用

如果您想同時允許 copy-via-const-ref 和 move-via-rvalue-ref,您可以模板化您的Add方法並使用通用轉發引用技術,或者明確地編寫兩個重載:

    void Add(const T& v) { 
        m_Items.push_back(v); 
    }
    void Add(T&& v) { 
        m_Items.push_back(std::move(v)); 
    }

或者

    template <typename U>
    void Add(U&& v) { 
        m_Items.push_back(std::forward<U>(v)); 
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Qt 上使用 std::unique_ptr

C++ 編譯器錯誤:使用已刪除的函數 std::variant()

使用std :: unique_ptr <T>&代替std :: unique_ptr <T>有什么优势吗?

使用什么std :: optional或std :: unique_ptr

在 QVector<std::unique_ptr<Type>> 上使用 std::find

使用 std::unique_ptr<T>::unique_ptr` 在 Visual Studio 2013 中构建错误

std :: unique_ptr尝试引用已删除的函数

使用 std::unique_ptr 使用 CRTP 进行转换

如何在std :: copy中使用unique_ptr?

如何使用std:unique_ptr擦除包含结构的向量?

使用std :: unique_ptr创建对象数组

我应该使用QScopedPointer还是std :: unique_ptr?

使用std :: move(nullptr)的unique_ptr的operator =的C ++错误

使用std :: unique_ptr时出现内存泄漏

一些std :: unique_ptr使用和“陷阱”

使用 std::move 分配 unique_ptr 不起作用

使用地图内的std :: unique_ptr作为键

使用带有分配器的std :: unique_ptr

无法使用std :: unique_ptr初始化指针

如何在结构上使用std :: unique_ptr?

使用std :: unique_ptr增强图形捆绑属性

const使用std :: unique_ptr / std :: shared_ptr正确合成

使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

奇怪的错误:当未真正创建指针时,使用删除的函数'std :: unique_ptr <_Tp,_Dp> :: unique_ptr

将std :: list <std :: unique_ptr>移至向量尝试引用已删除的函数

使用 std::move 将 std::unique_ptr 作为 qt 信号参数传递

使用`std :: unique_ptr`时`std :: vector`中的数据不同

使用std :: function对象将自定义删除器传递给std :: unique_ptr

C ++ std :: unique_ptr存储在std :: map内部,使用删除的函数会形成不良