1. 程式人生 > >關於連結串列類的拷貝建構函式與解構函式

關於連結串列類的拷貝建構函式與解構函式

連結串列類的拷貝建構函式需要把整個連結串列複製一遍!

(有借鑑網友們的文章)

CMyLinkList::CMyLinkList(const CMyLinkList & aList)
{
    //cout << "呼叫拷貝建構函式" << endl;
    m_pHeader = new Node();
    m_pHeader->next = NULL;
    Node* ptr1 = m_pHeader;
    Node* ptr2 = aList.m_pHeader->next;
    while (ptr2)
    {
        ptr1->next = new Node();
        ptr1 = ptr1->next;
        ptr1->data = ptr2->data;
        ptr1->next = NULL;
        ptr2 = ptr2->next;
    }
}

CMyLinkList::~CMyLinkList()
{
    cout << "呼叫解構函式" << endl;
    Node* ptrTemp1 = this->m_pHeader;
    Node* ptrTemp2 = this->m_pHeader;
    while (ptrTemp1->next)
    {
        ptrTemp2 = ptrTemp1->next;
        delete ptrTemp1;
        ptrTemp1 = ptrTemp2;
    }
    delete ptrTemp1;
    ptrTemp1 = NULL;
    ptrTemp2 = NULL;
    m_pHeader = NULL;
}

相關推薦

關於連結串列拷貝建構函式函式

連結串列類的拷貝建構函式需要把整個連結串列複製一遍! (有借鑑網友們的文章) CMyLinkList::CMyLinkList(const CMyLinkList & aList) {     //cout << "呼叫拷貝建構函式" <<

單繼承派生建構函式函式順序

派生類建構函式形式: 派生類建構函式 (引數表):基類建構函式(引數表) 類物件成員1(引數表)... 類物件成員n(引數表)//只能用表示式的方式對類物件成員進行初始化 {...派生類自定義的資料成員初始化} 在派生類中,首先呼叫基類的建構函式,其次呼叫

c++之派生建構函式函式問題

#include <iostream> using namespace std; class Base1 { //基類Base1,建構函式有引數 public: Base1(int i) { cout << "Constructing Base1 " << i <

C++中struct也有建構函式函式,也可以有訪問型別控制以及結構體大小,大小

C++中struct也有建構函式與解構函式,也可以有訪問型別控制,可以用private關鍵字。如下所示: #include <iostream> struct point { public: point():x_(0.0),y_(0.0

C++建構函式函式

C++中每個類都有其構造與解構函式,它們負責物件的建立和物件的清理和回收,即使我們不寫這兩個,編譯器也會預設為我們提供這些建構函式。下面仍然是通過反彙編的方式來說明C++中構造和解構函式是如何工作的。 編譯器是否真的會預設提供構造與解構函式 在一般講解C

C++(建構函式函式

C++(建構函式與解構函式) 1. 建構函式 用於對類的物件的初始化,建構函式名與類名相同。 可在類內直接定義,也可在類內宣告類外定義(定義時在函式名前加類名::)。 建構函式無返回值型別。 class C { public: C(int a,int b);//類

Java的建構函式函式(筆記1)

已Mydate為例: package text1; public class MyDate { int year; int month; int day; //1.建構函式 public MyDate(int y,int m,int d) { year = y; mon

《C++反彙編逆向分析技術揭祕》讀書總結——建構函式函式

建構函式的必要條件: 這個函式的呼叫,是這個物件在作用域內的第一次成員函式呼叫,看this指標即可以區分物件,是哪個物件的this指標就是哪個物件的成員函式。 使用thiscall呼叫方式,使用ecx傳遞this指標; 返回值為this指標。 解構函式的必要條件: 這

C++知識積累:運算子過載時建構函式函式呼叫次數不一致的問題

在學習運算子過載的時候自己寫了這樣一段程式: class Stu { public: Stu() { std::cout<<"Stu No parameter constructor called!"<<

建構函式函式的呼叫時間

    建構函式與解構函式是被編譯器隱式呼叫的。這些函式的呼叫時間取決於程式執行進入和離開例項化物件的作用域的順序。通常,解構函式的呼叫順序和對應建構函式的呼叫順序相反。但是,物件的儲存類別可以改變解構函式的呼叫順序。    在全域性作用域內定義的建構函式在該檔案中任何其他函

建構函式函式

類的建構函式是在建立類的物件時有系統自動執行的函式,一般把類的初始化工作放在這裡,客戶無法呼叫該函式。  類解構函式是類的物件在銷燬是執行的函式,一些收尾工作放在這裡,比如釋放記憶體等,客戶無法呼叫  

建構函式函式的示例

class Student { public: Student(); Student(int); private: double score, count; };     建構函式是一個很神奇

C/C++面試題:建構函式函式

建構函式與解構函式的一道小題 下面程式的輸出是什麼? #include<iostream> using namespace std; class TestClass{ cha

解析c++建構函式函式

目錄 建構函式的定義 定義:建構函式是一種特殊的成員函式,對物件進行初始化的函式。 建構函式的特點 建構函式名字必須與類名相同。 建構函式不具有任何型別,沒有返回值。 在建立類的物件的時候,系統會自動呼叫建構函式。 如果使用者沒有定義建構函式,系

建構函式函式的比較

建構函式的作用:建立並初始化物件,即為物件成員變數賦初始值。 特點: 1、建構函式名與類名相同。 2、建構函式沒有返回值。 3、建構函式不可以被直接呼叫。 4、定義了類沒有定義建構函式時C++

(四)C#之建構函式函式

建構函式與解構函式 建構函式 首先我們看一下例項建構函式的形式 |建構函式修飾符| 識別符號 (|引數列表|) |: base(|引數列表|)| |:this(|引數列表|)| { 建構函式語句塊; } 如果你以前沒學過

建構函式函式測試

#include<iostream> using namespace std; class C { public: C() { cout << "construct C" << endl; } ~C() { cout << "d

Java的建構函式函式

package text1; public class MyDate { int year; int month; int day; //1.建構函式 public MyDate(int y,int m,int d) { year = y; mont

建構函式函式中不呼叫虛擬函式

本文參考《effective C++》第九條款 在C++中,提倡不能在建構函式和解構函式中呼叫虛擬函式。 這是為什麼呢? 首先,我們先回顧一下C++虛擬函式的作用。 虛擬函式的引入是c++執行時多型的體現,通過呼叫虛擬函式可以在執行程式時實現動態繫結,體現

C++建構函式函式呼叫虛擬函式的注意事項

雖然可以對虛擬函式進行實呼叫,但程式設計師編寫虛擬函式的本意應該是實現動態聯編。在建構函式中呼叫虛擬函式,函式的入口地址是在編譯時靜態確定的,並未實現虛呼叫。但是為什麼在建構函式中呼叫虛擬函式,實際上沒有發生動態聯編呢? 第一個原因,在概念上,建構函式的工作是