Tôi tự hỏi rằng có thể chắc chắn trật tự giữa sự tàn phá của đối tượng toàn cầu và atexit
trong C++thứ tự giữa sự tàn phá của đối tượng toàn cầu và atexit trong C++
Tôi có một đối tượng toàn cầu và đăng ký atexit
chức năng như dưới đây:
static MyClass g_class;
void onExit()
{
// do some destruction
}
int main()
{
atexit(onExit);
return 0;
}
Tôi đã tìm thấy onExit()
được gọi trước MyClass::~MyClass()
trong Visual Studio 2012 và gcc4.7.2. Tôi có chắc rằng onExit
luôn được gọi trước khi đối tượng toàn cầu (như g_class
) hủy diệt?
Tôi tự hỏi đăng ký đối tượng toàn cầu và atexit
đơn đặt hàng đăng ký sử dụng cùng một bảng thứ tự. Hoặc không có mối quan hệ nào giữa thứ tự đối tượng toàn cầu và đơn đặt hàng atexit
?
Đã chỉnh sửa: Xin lỗi tôi đã viết nhầm. Tôi rất bối rối trong khi làm sạch mã ví dụ. onExit()
được gọi trước ~ MyClass().
Tôi nghi ngờ đơn đặt hàng đó không chắc chắn 100%. Bạn quan tâm làm gì? –
Tạo một đối tượng toàn cầu khác trước 'MyClass' và gọi' atexit (onExit) 'trong hàm tạo của nó để kiểm tra. – lapk
Muốn kiểm soát tuổi thọ của các đối tượng, hãy sử dụng các đối tượng động. – PiotrNycz