【发布时间】:2018-10-20 22:42:58
【问题描述】:
看起来像将 unique_ptr 的嵌套向量创建为空抛出 试图引用已删除的函数。我相信这是因为它试图复制向量 unique_ptr(nullptr) 的并且 unique_ptr(nullptr) 是不可复制的。
#include <memory>
#include <vector>
struct Foo {
};
int main() {
std::vector<std::vector<std::unique_ptr<Foo>>> foo(5, std::vector<std::unique_ptr<Foo>>(5));
}
https://onlinegdb.com/SkvGkVYoQ
我不确定如何继续。我只需要一个 nullptr 的多维数组,如果它们是唯一的,那就太好了 - 除了解决这个问题之外,不需要 shared_ptr。
【问题讨论】:
-
它与 nullptr 无关——unique_ptr 本身是不可复制的,正如它的名字所暗示的那样。
-
对。那么我将如何通过定义默认大小来创建一个 unique_ptr 的多维数组呢?
-
不要使用
std::vector的 copy-from-element ctor 制作第一个维度,然后使用 ranged for 调整每个向量的内部维度。 -
你为什么使用
vector<unique_ptr<Foo>>而不仅仅是vector<Foo>? -
我想在未来某个时间点将 Foo 的所有权分配给向量
vector<unique_ptr<Foo>> foo; foo.at(2) = std::make_unique<Foo>();。这就是为什么它们现在是 nullptr 的。
标签: c++ vector null unique-ptr