当调用vector的push_back方法时,向量中的上一个对象正在被破坏,原因可能是什么。在添加新对象时销毁向量中的对象
template<typename type> void SomeList<type>::AddElement(type &inObject)
{
pList.push_back(inObject);// pList is member of my class Vector SomeList
}
当调用vector的push_back方法时,向量中的上一个对象正在被破坏,原因可能是什么。在添加新对象时销毁向量中的对象
template<typename type> void SomeList<type>::AddElement(type &inObject)
{
pList.push_back(inObject);// pList is member of my class Vector SomeList
}
该向量不会破坏该对象。它取代它。
例如:
vector< A> myVector; // Do some initialization, etc.
A myNewObject;
myVector[0] = myNewObject; // Replace the object.
这意味着赋值运算符(A & A::operator=(const A&)
)将被称为用于myVector[0]
。那里没有破坏。
当矢量本身被破坏,或者当内存被重新分配时(在这种情况下,复制构造函数也被用于将对象从旧位置复制到新位置,然后销毁旧的那些)。
后来编辑 在的push_back情况下,破坏必须由一个重分配来确定。
如果您发布了一些代码,我们将有更好的机会帮助您。仅供参考,vector::push_back
可能会导致内部阵列重新分配,因此可能会增长。这是你的意思吗?
它可能不是该对象本身被“摧毁”,而是在重新分配期间增加矢量大小时,该对象被复制,旧对象被清除。因此,在创造和销毁控制程序流程中加入某些东西并不是一个好主意。为此,我会建议另一个容器对象或smart_ptr
。
当载体的push_back方法是所谓的矢量以前的对象是越来越销毁。这可能是什么原因。
原因是std::vector
因此被指定。
当您不断向元素添加元素时,某个点的内存容量已用完。然后它会分配一个新的内存储备,将所有旧对象复制到那里(加上发生时添加的对象),并销毁旧对象。
std::vector
试图通过“过度分配”来最小化这种情况,它分配的内存超过预期进一步增长所需的内存。 (查找capacity()
与size()
和reserve()
与resize()
以了解更多关于此的信息。)但是每个储备可能在某个时间点被超过,然后它必须重新分配和复制。
如果你不想要这个,看看std::deque
std::list
。
一些代码,请。矢量通常不会这样做,所以在任何人都可以帮助您之前需要一些背景。 – 2010-05-14 13:32:08
@Marcelos编辑了代码为 – boom 2010-05-14 13:37:46
的查询。将来,突出显示您的代码并单击'101010'按钮进行正确格式化。 – 2010-05-14 13:38:43