我有这个指向vector的向量:
std::vector<std::shared_ptr<std::vector<int>>> vec;
我想将第一个指针初始化为指向空向量的指针。我试过这个:
vec.push_back(nullptr);
然后我想将一些值push_back到nullptr指向的向量。我这样做了:
vec[0]->push_back(x);
我知道这是错误的,它最终会出现在段错误中。我尝试用make_shared()而不是nullptr做一些事情,但我仍然无法弄清楚如何实现我提到的。任何人都可以帮我修复这个例子吗?
答案 0 :(得分:7)
如果您希望vec
包含一个向量的有效共享指针,它就像
vec.emplace_back(std::make_shared<std::vector<int>>());
现在有指针,指向有效对象。使您的后续子脚本和取消引用有效。
请确保你没有第二次。如果先插入nullptr
,然后插入有效指针,则指向对象的vec[1]
,而不是vec[0]
。您的原始尝试在向量的开头放置一个空的共享指针。如果你在它之后插入更多元素,它就不会去任何地方。