Trang tài liệu
Khóa học C++ nền tảng
Chương 6. Con trỏ và tham chiếu
Tuổi thọ của đối tượng trong C++

Tuổi thọ của đối tượng trong C++

Thời gian tồn tại của đối tượng đề cập đến thời gian mà một đối tượng tồn tại, kể từ thời điểm nó được tạo ra cho đến khi nó bị hủy. Trong C++, vòng đời của một đối tượng có thể được phân thành bốn loại:

  • Thời lượng lưu trữ tĩnh: Các đối tượng có thời lượng lưu trữ tĩnh tồn tại trong toàn bộ quá trình chạy chương trình. Các đối tượng này được cấp phát khi bắt đầu chạy chương trình và được cấp phát lại khi chương trình kết thúc. Biến toàn cục, thành viên dữ liệu tĩnh và biến cục bộ tĩnh thuộc danh mục này.
int global_var;            // Thời lượng lưu trữ tĩnh
class MyClass {
  static int static_var;   // Thời lượng lưu trữ tĩnh
};
void myFunction() {
  static int local_var;    // Thời lượng lưu trữ tĩnh
}
  • Thời lượng lưu trữ luồng: Các đối tượng có thời lượng lưu trữ luồng tồn tại trong suốt thời gian tồn tại của luồng mà chúng thuộc về. Chúng được tạo khi một luồng bắt đầu và bị hủy khi luồng đó thoát. Thời lượng lưu trữ luồng có thể được chỉ định bằng cách sử dụng từ khóa thread_local.
thread_local int my_var;   // Thời lượng lưu trữ luồng
  • Thời lượng lưu trữ tự động: Các đối tượng có thời lượng lưu trữ tự động được tạo tại thời điểm xác định và bị hủy khi thoát khỏi phạm vi mà chúng được khai báo. Các đối tượng này còn được gọi là các đối tượng "cục bộ" hoặc "ngăn xếp". Các tham số hàm và các biến không tĩnh cục bộ thuộc loại này.
void myFunction() {
  int local_var;           // Thời lượng lưu trữ tự động
}
  • Thời lượng lưu trữ động: Các đối tượng có thời lượng lưu trữ động được tạo trong thời gian chạy, sử dụng các chức năng cấp phát bộ nhớ như new hoặc malloc. Thời gian tồn tại của các đối tượng này phải được quản lý theo cách thủ công vì chúng không được tự động hủy cấp phát khi thoát khỏi phạm vi. Thay vào đó, trách nhiệm của lập trình viên là hủy các đối tượng bằng cách sử dụng hàm delete hoặc free khi chúng không còn cần thiết, để tránh rò rỉ bộ nhớ.
int* ptr = new int;        // Thời lượng lưu trữ động
delete ptr;

Hiểu thời gian tồn tại của đối tượng là điều cần thiết để quản lý bộ nhớ hiệu quả trong các chương trình C++ và tránh các vấn đề phổ biến như rò rỉ bộ nhớ và hành vi không xác định.

Hãy nhớ rằng sự hiểu biết đúng đắn về hàm tạo và hàm hủy đối với các lớp cũng rất cần thiết khi làm việc với các đối tượng có thời gian tồn tại khác nhau, vì chúng cho phép bạn kiểm soát hành vi tạo và hủy đối tượng.