C++學習筆記 04 構造函數(shù) 和 析構函數(shù)

一、不寫構造函數(shù)帶來的問題

  1. 屬性值未被初始化,是內(nèi)存上的臟數(shù)據(jù)
  2. 創(chuàng)建對象語句,于編譯期報錯:Using uninitialized memory
  3. 不同于java,屬性有默認值,C++屬性的初始值需要程序員手動指定
#include<iostream>

class Entity {
public:
    int x, y;
    void print() {
        //-858993460 , -858993460
        std::cout << x << " , " << y << std::endl;
    }
};

int main() {
        //1. 內(nèi)部方法調(diào)用時,會顯示未初始化的內(nèi)存數(shù)據(jù)
    Entity e;
        e.print();

        //2. 外部直接訪問未初始化屬性的對象時,編譯報錯
    //如果沒有構造函數(shù):編譯報錯:Using uninitialized memory 'e'.
    // 如果有空構造函數(shù):-858993460 , -858993460
    std::cout << e.x << " , " << e.y << std::endl;
}

二、隱藏構造函數(shù)的2種方式

  1. private
  2. delete
#include<iostream>

class Log {
private:
    //1. 隱藏默認構造函數(shù)方式一
    Log() {}
public:
    //2. 隱藏默認構造函數(shù)方式二
    //Log() = delete;

    static void write(const char* message) {
        std::cout << message << std::endl;
    }
};

int main() {
    Log::write("Hello");
    Log log;
    log.write("World");
}

三、析構函數(shù)

在當前棧區(qū)釋放時,該棧中的對象會背釋放,此時調(diào)用析構函數(shù)

#include<iostream>

class Entity {
public:
    Entity() {
        x = 0;
        y = 0;
        std::cout << "Create Entity!" << std::endl;
    };
    ~Entity() {
        std::cout << "Destroy Entity!" << std::endl;
    };
    int x, y;

    void print() {
        //-858993460 , -858993460
        std::cout << x << " , " << y << std::endl;
    }
};

//需要挪到main函數(shù)之外,能看到析構函數(shù)的調(diào)用
void testDestructor() {
    Entity e;
    e.print();
}


int main() {
    //對象在棧上創(chuàng)建,當作用域(當前方法)結束時會被自動銷毀
    //最后一行代碼:std::cin.get(); 執(zhí)行完成后, 當前棧被銷毀,e,被銷毀,執(zhí)行e的析構函數(shù)。但黑窗口已經(jīng)不見了
    //所以將此調(diào)用移到main函數(shù)之外
    //Entity e;

    //如果沒有構造函數(shù):編譯報錯:Using uninitialized memory 'e'.
    // 如果有空構造函數(shù):-858993460 , -858993460
    //std::cout << e.x << " , " << e.y << std::endl;
    //e.print();
    
    testDestructor();
    std::cin.get();

}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容