Sử dụng biến thành viên static để đếm số lượng đối tượng đang tồn tại của một class. Biến static thuộc về class, không thuộc đối tượng.
Ví dụ mã nguồn
#include <iostream>
using namespace std;
class Tracked {
static int count; // Khai báo
public:
Tracked() { ++count; cout << "Tao doi tuong, tong: " << count << '\n'; }
~Tracked() { --count; cout << "Huy doi tuong, con: " << count << '\n'; }
static int getCount() { return count; } // Static member function
};
// Định nghĩa biến static (cấp phát bộ nhớ)
int Tracked::count = 0;
int main() {
cout << "Ban dau: " << Tracked::getCount() << '\n';
{
Tracked a, b;
cout << "Trong block: " << Tracked::getCount() << '\n';
} // a, b hủy ở đây
cout << "Sau block: " << Tracked::getCount() << '\n';
Tracked* p = new Tracked();
cout << "Sau new: " << Tracked::getCount() << '\n';
delete p;
cout << "Sau delete: " << Tracked::getCount() << '\n';
return 0;
}
Đầu ra
Ban dau: 0 Tao doi tuong, tong: 1 Tao doi tuong, tong: 2 Trong block: 2 Huy doi tuong, con: 1 Huy doi tuong, con: 0 Sau block: 0 Tao doi tuong, tong: 1 Sau new: 1 Huy doi tuong, con: 0 Sau delete: 0
Lưu ý
- Biến static phải được định nghĩa ngoài class (trong file .cpp).
- Hàm static chỉ truy cập được thành viên static.
- Thread-safe: C++11 đảm bảo khởi tạo static local thread-safe, nhưng biến static class cần đồng bộ hóa thủ công nếu đa luồng.