当调用vector的push_back方法时,向量中的前一个对象被破坏可能是原因。
template<typename type> void SomeList<type>::AddElement(type &inObject)
{
pList.push_back(inObject);// pList is member of my class Vector SomeList
}
答案 0 :(得分:4)
可能不是该对象本身被“销毁”,而是在重新分配期间增加向量大小,对象被复制并且旧对象被清理。因此,放入创建和销毁控制程序流动的东西并不是一个好主意。为此,我建议另一个容器对象或smart_ptr
。
答案 1 :(得分:1)
如果您发布一些代码,我们将有更好的机会帮助您。仅供参考,vector::push_back
可能会导致重新分配内部数组,以便它可以增长。那是你的意思吗?
答案 2 :(得分:0)
矢量不会破坏对象。它取代了它。
例如:
vector< A> myVector; // Do some initialization, etc.
A myNewObject;
myVector[0] = myNewObject; // Replace the object.
这意味着将为& A::operator=( const A&)
调用赋值运算符(A myVector[0]
)。那里没有破坏。
当矢量本身被破坏时,或者当重新分配存储器时(在这种情况下,还使用复制构造函数,将对象从旧位置复制到新位置,然后销毁旧位置),完成销毁)。
稍后修改 在push_back情况下,必须通过重新分配来确定销毁。
答案 3 :(得分:0)
当调用vector的push_back方法时,向量中的前一个对象被破坏。可能是什么原因。
原因是因此指定了std::vector
。
当你不断向向量添加元素时,它的某些内存容量会被用尽。然后它会分配一个新的内存储备,将所有旧对象复制到那里(加上你发生时添加的那个),并销毁旧对象。
std::vector
试图通过“过度分配”来最小化这一点,它分配的内存超过预期进一步增长所需的内存。 (请查看capacity()
与size()
和reserve()
与resize()
的对比以了解详情。)但是,某些保留可能会在某个时候超出,然后必须重新分配和复制。
如果您不想这样做,请查看std::deque
的{{1}}。