【问题标题】:Initializing a vector of pointers to vector初始化指向向量的指针向量
【发布时间】:2018-02-26 16:24:39
【问题描述】:

我有这个指向向量的向量:

std::vector<std::shared_ptr<std::vector<int>>> vec;

我想将第一个指针初始化为指向空向量的指针。我试过这个:

vec.push_back(nullptr);

然后我想 push_back 一些值到 nullptr 指向的向量。我这样做了:

vec[0]->push_back(x);

我知道这是错误的,但最终会出现段错误。我试图用 make_shared() 而不是 nullptr 做一些事情,但我仍然不知道如何实现我提到的。谁能帮我解决这个例子?

【问题讨论】:

  • nullptr从不“指向空向量的指针”。
  • “我试图用 make_shared() 代替 nullptr” 你应该向我们展示你的尝试,以便我们可以纠正它。
  • 我怀疑你真的想要一个向量指针向量。你用它来解决什么问题?
  • 可以直接用1个元素初始化std::vector&lt;std::shared_ptr&lt;std::vector&lt;int&gt;&gt;&gt; vec { std::make_shared&lt;std::vector&lt;int&gt;&gt;() };

标签: c++ vector shared-ptr


【解决方案1】:

如果你想让vec 包含一个指向向量的有效共享指针,那么简单

vec.emplace_back(std::make_shared<std::vector<int>>());

现在那里有指针,它指向有效的对象。使您随后的子脚本和取消引用本身有效。

请确保您不这样做。如果您先插入一个nullptr,然后再插入一个有效指针,那么指向对象的将是vec[1],而不是vec[0]。您最初的尝试在向量的开头放置了一个空的共享指针。如果您在其后插入更多元素,它不会去任何地方。

【讨论】:

  • 只是补充一点,在这种情况下,我有一个关于 newmake_shared 的问题。 This question 回答了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 2011-08-04
相关资源
最近更新 更多