我正在用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