Computer >> Máy Tính >  >> Lập trình >> C ++

Chơi với Kẻ hủy diệt trong C ++

Bộ hủy là một hàm của một lớp trong c ++ thực hiện công việc xóa đối tượng của một lớp.

Gọi một trình hủy

Bộ hủy được gọi khi đối tượng của một lớp đi ra khỏi phạm vi trong chương trình. Các trường hợp khi đối tượng vượt ra khỏi phạm vi,

  • Chương trình vượt ra khỏi phạm vi của một chức năng.

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

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

  • Khi toán tử của đối tượng bị xóa.

Ví dụ

Hãy xem mã và đoán đầu ra của chương trình,

#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;
}

Đầu ra

i = 3

Hãy hiểu đoạn mã trước, ở đây chúng ta đã tạo một biến toàn cục I và sau đó trong hàm khởi tạo giá trị, chúng ta đã thay đổi giá trị của nó. Ở đây, chúng tôi đã khởi tạo nó với giá trị 3, sau đó tạo đối tượng d1 và sau đó trả về giá trị.

Đoán kết quả đầu ra?

Đó là 3, hãy vỗ tay cho bạn nếu bạn đoán đúng và đừng lo lắng nếu bạn nghĩ là 10. Bây giờ, hãy xem điều gì đã xảy ra ở đây,

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

Ví dụ

Hãy thử đoán lại kết quả của khối này ngay bây giờ,

#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;
}

Đầu ra

Đây là mã trông tương tự nhưng mã này

Bản in:i =10 thay vào đó.

Tại sao?

Ở đây, chúng tôi đã trả về tham chiếu biến thay vì giá trị. Vì vậy, khi hàm hủy được gọi, nó sẽ thay đổi giá trị thành 10 và khi tham chiếu được chuyển qua 10 sẽ được in.