0
我創建了一個存儲鏈接列表的類'Route'。 'Route'類的對象存儲在向量中(有時會被刪除)。C++向量對象,包含動態分配的內存 - '擦除'不起作用
沒有複製構造函數/析構函數/ etc。該程序工作正常,但我想避免內存泄漏,所以我需要一個副本構造/析構函數等。自創建這些,向量'擦除'似乎刪除向量中的錯誤元素(即最後一個元素,而不是第n個元件)。有時元素會從矢量中刪除,即使沒有任何元素應該被刪除。我的構造函數/析構函數/拷貝構造函數有什麼問題嗎? (每次複製一個Route對象,將其放到一個向量上時,將使用新的內存 - 使用'copyLinkedList'函數創建一個全新的鏈接列表版本。
`Route::Route(int destnAddr, MovePtr routeToDestn) :
destinationAddress(destnAddr){
firstMove = copyLinkedList(routeToDestn);
}
Route::Route(const Route& _route){
destinationAddress = _route.destinationAddress;
firstMove = copyLinkedList(_route.firstMove);
}
Route& Route::operator=(const Route& _route){
Route newRoute(_route);
return newRoute;
}
Route::~Route(){
MovePtr toDelete = firstMove;
while(firstMove != NULL){
firstMove = firstMove->next_move;
delete toDelete;
toDelete = firstMove;
}
}
MovePtr Route::copyLinkedList(MovePtr listHead) {
MovePtr newListHead = NULL;
if (listHead == NULL){
return newListHead;
}
newListHead = new Move;
newListHead->router_address = listHead->router_address;
newListHead->next_move = copyLinkedList(listHead->next_move);
return newListHead;
}`
更不用說這會導致無限遞歸。 – 2014-11-22 14:19:07
是的,重寫重載賦值操作符工作 - 出於某種原因,我曾經以爲矢量只使用拷貝構造函數/析構函數。謝謝! – hassapikos 2014-11-22 15:08:33