我一直在做一個鏈表,並有一個功能CountListItems()
,它通過值傳遞列表。複製將被創建並且複製構造函數被調用。當函數按值傳遞參數時,複製構造函數如何工作?
複製構造函數在試圖複製時崩潰。我很困惑,this
在複製構造函數中指向什麼?在這種情況下沒有調用對象,對吧?
當我運行調試器時,this
具有與參數相同的節點數,但其所有值都未初始化。
任何嘗試刪除this
的節點都會導致崩潰。複製構造函數底部的行(1)是我當前的解決方案。即使程序正常工作,這是否會導致內存泄漏?
//main.cpp
int CountListItems(LinkedList data);
int main()
{
LinkedList list;
int x = 1;
list.InsertData(x);
/* Pass LinkedList by value, so that the copy constructor is invoked. */
CountListItems(data);
return 0;
}
//LinkedList.h
class LinkedList
{
public:
struct Node
{
int data;
Node *prev;
Node *next;
}
/* Copy constructor */
LinkedList(LinkedList &original);
~LinkedList();
DataInsert(int data);
private:
/* Copy list node by node. */
void CopyList(LinkedList &original);
Node *first;
Node *curr;
Node *last;
};
//LinkedList.cpp
/* Copy Constructor */
LinkedList::LinkedList(LinkedList &original)
{
first = last = curr = 0; // (1) Attempt at a solution (Initialize "this")
/* this->~LinkedList(); */ // (2) Produces Crash
CopyList(original); // (3) Without (1) Produces Crash
return;
}
注意:在'LinkedList'中聲明'Node'子類後,你缺少一個分號。而'DataInsert'沒有返回類型,這是標準兼容C++所必需的。您應該修復* *或發佈*真實代碼*。 – WhozCraig