我正在用std::vector
来保存一些具有动态分配成员的对象,当我将事物放入向量中时,发生了一些我不了解的事情。C++矢量问题
我打电话
push_back()
和使用的对象作为参数的构造函数,但由于某种原因它关系到该对象的析构函数。为什么是这样;它应该添加不删除?我再次打电话
push_back()
与以前一样,但是这次它会抛出非法内存访问dbgdel.cpp
操作员删除(第52行)。但删除不应该在构造函数中调用,或者push_back()
。
我不确定哪些代码段与此问题相关,因为所讨论的行在方法中是非常根深蒂固的。
编辑:代码添加
class Thing{
int** Array;
int size; // of square array
Point current; // location
Thing(int _n){
// allocates, and gives values to the array, and members
// only constructor
}
};
class ThingMgr{
Thing * Control;
Thing * Current;
Thing * Previous;
int size; // size of all. same use as in Thing
ThingMgr(int _n){
size = _n;
Control = new Thing(size);
Current = new Thing(size);
Previous = new Thing(size);
}
void rearrange(int _num){
std::vector<Thing> possibles;
// performs deterministic work on members
// [0] first
possibles.push_back(Thing(size)); // this succeeds
// [1] second
possibles.push_back(Thing(size)); // this fails
// more operations to be performed never reached.
}
};
你可以发表包含push_back()的行吗?我怀疑你正在将一个对象复制到向量中,因此创建,复制并破坏了一个对象(因此调用析构函数) – 2012-03-07 21:58:07
为什么你不显示实际的代码?我不相信您的散文描述与术语准确地匹配,因为术语看起来有点......未定义 – sehe 2012-03-07 21:58:36
在push_back过程中,vector类允许使用其复制构造函数创建对象的副本,然后其中一些副本可能会被销毁并且它们的析构函数会被调用。你有一个有效的复制构造函数给你的类吗? – 2012-03-07 21:59:34