Trên Linux, tôi có một số mã C++ được tạo từ một thư viện tĩnh định nghĩa một biến toàn cầu. Một cá thể duy nhất của biến toàn cầu này được chia sẻ giữa hai thư viện được chia sẻ tham chiếu đến biểu tượng của nó.Trên Linux, tại sao trình phá hủy chạy hai lần trên cá thể chia sẻ của biến toàn cục trong C++?
Khi quá trình tắt và giai đoạn kết thúc tĩnh được chạy, tôi thấy rằng hàm hủy trên phiên bản dùng chung này được chạy hai lần! Có lẽ một lần cho mỗi thư viện là mỗi lần tải.
Câu hỏi này liên quan chặt chẽ đến câu hỏi khác tôi đã thấy gần đây tại đây: related question. Điều này nghe giống như hành vi tương tự, nhưng không có thảo luận về lý do tại sao nó đang xảy ra.
Có ai biết giải thích lý thuyết đằng sau hành vi này không?
Nó chỉ được chạy một lần cho mỗi biến bởi trình biên dịch tạo mã. Hãy thử lấy địa chỉ của biến khi hàm hủy được chạy để xác minh rằng nó là cùng một đối tượng. –
Có lẽ bạn đã lưu một con trỏ tới đối tượng trong một số lớp con trỏ thông minh, mà cố gắng phá hủy nó. –
Vì vậy, toàn cầu được định nghĩa trong (một đơn vị biên dịch) chỉ một trong các thư viện? – Thomas