San*_*Gil 0 c++ pointers shared-ptr dynamic-memory-allocation
我正在使用C++ 14.我们假设我有一个class X和一个std::vector<X> mVector.
我还有以下代码:
std::shared_ptr<X> AddX(const X &x)
{
mVector.push_back[x];
return std::shared_ptr<X>(&mVector[mVector.size()-1])
}
Run Code Online (Sandbox Code Playgroud)
此方法将对象x插入mVector并返回一个指向此插入对象的共享指针.
X x1;
shared_ptr<X> pX1 = AddX(x1);
Run Code Online (Sandbox Code Playgroud)
一切正常,但当我插入第二个对象
X x2;
shared_ptr<X> pX2 = AddX(x2);
Run Code Online (Sandbox Code Playgroud)
pX1不指向插入的对象x1,因为最后一个push_back已经在内存中移动了它的位置(在硬调试之后看到).这对我来说很可惜,因为我的程序需要这些指针才能正常工作,并且mVector需要是动态的,它一直在修改(使用新X对象或删除旧对象).
我怎样才能解决这个问题?我想比一种方法可以使用对象索引而不是它们的指针,但这会惩罚我的执行时间,因为我应该每次修改时更新许多属性mVector.是否可以管理它并仍然使用指针?
首先要做的事情.Everything works fine.没有.没有什么工作正常.您不应该将共享指针(或任何其他智能指针)返回到您自己未分配的内存中.
Vector管理自己的成员,如果你试图管理vector元素,你就会遇到大麻烦.
现在回答你的问题.看起来vector不是你的目标的好容器.如果您使用普通指针(而不是智能指针),您可以使用,例如,std::deque- 只要您不插入队列中间,并且只使用push_back和push_front.
另一种选择是使用索引而不是指针并保持不变vector- 即使在插入后索引也将保持不变.