<< Chapter < Page Chapter >> Page >

Khi nào các construtor và destructor  được gọi ?

Các constructor và destructor được gọi một cách tự động. Thứ tự các hàm này được gọi phụ thuộc vào thứ tự trong đó sự thực hiện vào và rời khỏi phạm vi mà các đối tượng được khởi tạo. Một cách tổng quát, các destructor được gọi theo thứ tự ngược với thứ tự của các constructor được gọi.

Các constructor được gọi của các đối tượng khai báo trong phạm vi toàn cục trước bất kỳ hàm nào (bao gồm hàm main()) trong file mà bắt đầu thực hiện. Các destructor tương ứng được gọi khi hàm main() kết thúc hoặc hàm exit() được gọi.

Các constructor của các đối tượng cục bộ tự động được gọi khi sự thực hiện đến điểm mà các đối tượng được khai báo. Các destructor tương ứng được gọi khi các đối tượng rời khỏi phạm vi (nghĩa là khối mà trong đó chúng được khai báo). Các constructor và destructor đối với các đối tượng cục bộ tự động được gọi mỗi khi các đối tượng vào và rời khỏi phạm vi.

Các constructor được gọi của các đối tượng cục bộ tĩnh (static) khi sự thực hiện đến điểm mà các đối tượng được khai báo lần đầu tiên. Các destructor tương ứng được gọi khi hàm main() kết thúc hoặc hàm exit() được gọi.

Ví dụ 3.9: Chương trình sau minh họa thứ tự các constructor và destructor được gọi.

#include<iostream.h>

class CreateAndDestroy

{

public:

CreateAndDestroy(int); //Constructor

~CreateAndDestroy(); //Destructor

private:

int Data;

};

CreateAndDestroy::CreateAndDestroy(int Value)

{

Data = Value;

cout<<"Object "<<Data<<" constructor";

}

CreateAndDestroy::~CreateAndDestroy()

{

cout<<"Object "<<Data<<" destructor "<<endl;

}

void Create(void); //Prototype

CreateAndDestroy First(1); //Doi tuong toan cuc

int main()

{

cout<<" (global created before main)"<<endl;

CreateAndDestroy Second(2); //Doi tuong cuc bo

cout<<" (local automatic in main)"<<endl;

static CreateAndDestroy Third(3); //Doi tuong cuc bo

cout<<" (local static in main)"<<endl;

Create(); //Goi ham de tao cac doi tuong

CreateAndDestroy Fourth(4); //Doi tuong cuc bo

cout<<" (local automatic in main)"<<endl;

return 0;

}

//Ham tao cac doi tuong

void Create(void)

{

CreateAndDestroy Fifth(5);

cout<<" (local automatic in create)"<<endl;

static CreateAndDestroy Sixth(6);

cout<<" (local static in create)"<<endl;

CreateAndDestroy Seventh(7);

cout<<" (local automatic in create)"<<endl;

}

Chương trình khai báo First ở phạm vi toàn cục. Constructor của nó được gọi khi chương trình bắt đầu thực hiện và destructor của nó được gọi lúc chương trình kết thúc sau tất cả các đối tượng khác được hủy bỏ. Hàm main() khai báo ba đối tượng. Các đối tượng Second và Fourth là các đối tượng cục bộ tự động và đối tượng Third là một đối tượng cục bộ tĩnh. Các constructor của các đối tượng này được gọi khi chương trình thực hiện đến điểm mà mỗi đối tượng được khai báo. Các destructor của các đối tượng Fourth và Second được gọi theo thứ tự này khi kết thúc của main() đạt đến. Vì đối tượng Third là tĩnh, nó tồn tại cho đến khi chương trình kết thúc. Destructor của đối tượng Third được gọi trước destructor của First nhưng sau tất cả các đối tượng khác được hủy bỏ.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Lập trình hướng đối tượng. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10794/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Lập trình hướng đối tượng' conversation and receive update notifications?

Ask