C++析構函數調用時機

總結

1、在匿名對象使用完後立刻調用析構函數

2、在棧區的對象,空間被釋放後立刻調用析構函數;

3、在堆區的對象,空間被delete後調用析構函數;free不能調用;

 

代碼驗證:1


void test() {
MyArry(10).getLen();//在棧區定義使用有參定義一個對象,並調用getLen方法,執行完立刻析構;
	cout << "在棧區定義使用有參定義一個對象,並調用getLen方法" << endl;
}

執行結果

代碼驗證:2

void test() {
	MyArry(10).getLen();//在棧區定義使用有參定義一個對象,並調用getLen方法,執行完立刻析構;
	cout << "在棧區定義使用有參定義一個對象,並調用getLen方法" << endl;
	//MyArry* arry1 = new MyArry(10);//new出來的空間只有使用delete時纔會調用析構函數;
	MyArry arry1(10);//在棧區使用有參構造定義一個對象;
}

 

代碼驗證:3 不使用delete

void test() {
	MyArry(10).getLen();//在棧區定義使用有參定義一個對象,並調用getLen方法,執行完立刻析構;
	cout << "在棧區定義使用有參定義一個對象,並調用getLen方法" << endl;
	MyArry* arry1 = new MyArry(10);//new出來的空間只有使用delete時纔會調用析構函數;
}

代碼驗證:3 使用delete

void test() {
	MyArry(10).getLen();//在棧區定義使用有參定義一個對象,並調用getLen方法,執行完立刻析構;
	cout << "在棧區定義使用有參定義一個對象,並調用getLen方法" << endl;
	MyArry* arry1 = new MyArry(10);//new出來的空間只有使用delete時纔會調用析構函數;
    delete arry1;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章