[英]How to avoid memory leaks when using a vector of pointers to dynamically allocated objects in C++?
[英]c++ vector of objects, containing dynamically allocated memory - 'erase' does not work
我創建了一個存儲路由列表的“路由”類。 “ Route”類的對象存儲在向量中(有時被刪除)。
沒有復制構造函數/析構函數/等。 該程序運行良好,但是我想避免內存泄漏,因此我需要一個復制構造函數/析構函數等。由於創建了這些構造函數,因此矢量“擦除”似乎從矢量中刪除了錯誤的元素(即,最后一個元素,而不是第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;
}`
您在operator=
所做的一切毫無意義。 您應該將參數的狀態分配給當前對象。 相反,您創建一個新對象並返回對其的懸掛引用。
嘗試在Google上搜索“賦值運算符”或“特殊成員函數”或“三個規則”以了解詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.