Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chơi với Destructor (Hàm hủy) trong C++


Destructor (Hàm hủy) là một hàm của class trong C++ thực hiện việc xóa đối tượng của class đó.

Khi nào Destructor được gọi?

Destructor được gọi khi đối tượng của class ra khỏi phạm vi (scope) trong chương trình. Các trường hợp đối tượng ra khỏi phạm vi:

  • Chương trình ra khỏi phạm vi của một hàm.

  • Chương trình kết thúc.

  • Khối khởi tạo biến cục bộ của đối tượng ra khỏi phạm vi.

  • Khi toán tử delete của đối tượng được gọi.

Ví dụ

Hãy xem code sau và đoán kết quả:

#include <iostream> 
using namespace std; 

int i; 
class destructor { 
public: 
    ~destructor() { 
        i = 10; 
    } 
}; 

int valueInitializer() { 
    i = 3; 
    destructor d1; 
    return i; 
} 

int main() { 
    cout << "i = " << valueInitializer() << endl; 
    return 0; 
}

Kết quả

i = 3

Hiểu code: ta có biến toàn cục i, trong hàm valueInitializer thay đổi giá trị nó. Khởi tạo i = 3, tạo đối tượng d1, trả về giá trị.

Đoán kết quả? Là 3. Nếu bạn đoán 10 thì đừng lo. Xem điều gì xảy ra:

Như đã thảo luận, destructor được gọi khi hàm gọi ra khỏi phạm vi. Trước khi ra khỏi phạm vi, hàm đã trả về giá trị 3.

Ví dụ tiếp theo

Thử đoán kết quả của khối code này:

#include <iostream> 
using namespace std; 

int i; 
class destructor { 
public: 
    ~destructor() { 
        i = 10; 
    } 
}; 

int& valueInitializer() { 
    i = 3; 
    destructor d1; 
    return i; 
} 

int main() { 
    cout << "i = " << valueInitializer() << endl; 
    return 0; 
}

Kết quả

Code này tương tự nhưng trả về tham chiếu (reference) thay vì giá trị. Vì vậy khi destructor được gọi, nó thay đổi giá trị thành 10 và vì tham chiếu được truyền nên in ra 10.

In ra: i = 10