Constructor được gọi tự động khi đối tượng được tạo. Thời điểm gọi phụ thuộc vào kiểu lưu trữ (storage duration) của đối tượng.
1. Đối tượng toàn cục (Global) - Static storage duration
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() { cout << "Global: Constructor\n"; }
};
MyClass globalObj; // Gọi TRƯỚC main()
int main() {
cout << "Trong main\n";
return 0;
}
// Đầu ra:
// Global: Constructor
// Trong main
2. Đối tượng cục bộ (Local) - Automatic storage duration
int main() {
cout << "Dau main\n";
MyClass localObj; // Gọi TẠI ĐIỂM KHAI BÁO
cout << "Sau khi tao doi tuong\n";
}
// Đầu ra:
// Dau main
// Local: Constructor
// Sau khi tao doi tuong
3. Đối tượng static cục bộ (Local static)
void func() {
static MyClass staticObj; // Chỉ gọi LẦN ĐẦU TIÊN vào func()
}
int main() {
func(); // Gọi constructor
func(); // KHÔNG gọi lại
}
// Đầu ra:
// Static: Constructor
// (lần 2 không in gì)
4. Đối tượng động (Dynamic) - new
int main() {
MyClass* ptr = new MyClass(); // Gọi TẠI new
delete ptr; // Destructor gọi tại delete
}
Tóm tắt
| Loại đối tượng | Constructor gọi khi |
|---|---|
| Global | Trước main() |
| Local (auto) | Tại dòng khai báo |
| Local static | Lần đầu thực thi dòng khai báo |
| Dynamic (new) | Tại toán tử new |