返回 std::vector<std::unique_ptr<Object>的方法>

Method returning std::vector<std::unique_ptr<Object>>

本文关键字:gt lt std 方法 Object 返回 unique vector ptr      更新时间:2023-10-16

作为一个:线程的延续,我遇到了一个问题编写返回的类的方法:

std::vector<std::unique_ptr<Object>> 

当编写这样的返回类型时,我会遇到编译器错误。删除操作数或其他问题。。。

一般来说,我想写一个初始化向量并返回它的方法

有人能帮我怎么写吗?

编辑:

我得到:试图引用已删除的函数h:\pliki programów(x86)\microsoft visual studio 12.0\vc\include\xmemory0

这里我有下面的代码片段。我可以创建这样的方法吗?

std::vector<std::unique_ptr<Object>> Class::TestMethod(int param)
{       
    std::vector<std::unique_ptr<Object>> array;
    auto day = std::make_unique<Object>();          
    array.push_back(day);
    return array;
}

您的错误实际上来自:

array.push_back(day);

这将尝试在向量中放置day的副本,这是不允许的,因为它是唯一的。

相反,您可以编写array.push_back( std::move(day) );,但以下内容会更好,取代auto day...:

array.emplace_back();

std::unique_ptr的复制构造函数被删除。这导致了一个问题:

array.push_back(day);

使用

array.push_back(std::move(day));