總結
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;
}