Tôi muốn biết các hàm đã đăng ký với atexit()
có được gọi là trước hoặc sau khi các biến toàn cục bị hủy. Điều này có được xác định bởi tiêu chuẩn hoặc thực hiện được xác định không?Khi nào một hàm được đăng ký với atexit() được gọi là
Trả lời
Người ta cũng xác định trước, và phụ thuộc vào việc các đối tượng trong câu hỏi được xây dựng trước hoặc sau khi chức năng đã đăng ký sử dụng atexit()
:
3.6.3 Chấm dứt
3. Nếu hoàn thành việc khởi tạo một đối tượng có thời gian lưu trữ tĩnh được giải trình tự trước khi gọi đến
std::atexit
(xem<cstdlib>
, 18.5), lệnh gọi hàm được chuyển đếnstd::atexit
được sắp xếp theo trình tự trước c tất cả với destructor cho đối tượng. Nếu một cuộc gọi đếnstd::atexit
được giải trình tự trước khi hoàn thành việc khởi tạo một đối tượng có thời lượng lưu trữ tĩnh, lệnh gọi hàm hủy đối tượng được sắp xếp trước khi cuộc gọi đến hàm được chuyển đếnstd::atexit
. Nếu cuộc gọi đếnstd::atexit
được sắp xếp theo trình tự trước một cuộc gọi khác đếnstd::atexit
, cuộc gọi đến hàm được chuyển đến cuộc gọi thứ haistd::atexit
được sắp xếp trước khi cuộc gọi đến hàm được chuyển đến cuộc gọi đầu tiênstd::atexit
. giải thích
giáo dân của tôi ở trên là những thứ đó đã được xây dựng trước khi bạn gọi atexit(handler)
bị phá hủy sauhandler()
được gọi, và ngược lại. Tôi chắc chắn có sự tinh tế, nhưng điều này có vẻ là nguyên tắc cơ bản.
- 1. Nhận lệnh lua khi hàm c được gọi là
- 2. Cách tìm mã thoát hoặc lý do khi gọi lại atexit được gọi bằng Python?
- 3. Lấy trạng thái thoát từ bên trong một chức năng đăng ký với atexit()
- 4. Đã bao nhiêu lần đăng nhập.error() được gọi là?
- 5. Quá trình Python sẽ không gọi atexit
- 6. Khi nào là finalize được gọi là trên singletons khi một classloader được phát hành?
- 7. Trong .NET, là các hàm tạo tĩnh được gọi khi một AppDomain mới được tạo ra?
- 8. Khi nào PyEval_InitThreads được gọi là?
- 9. Ký tự '`' được gọi là gì?
- 10. Làm cách nào để phát hiện một hàm JavaScript có chữ ký nào đó đã được đăng ký?
- 11. Khi nào là một hàm tạo tĩnh được gọi trong C#?
- 12. Thêm một chuỗi quan sát được sau khi đăng ký
- 13. Làm thế nào để gọi một sự kiện tự động khi một hàm được gọi?
- 14. Gọi một hàm trước khi nó được xác định | PHP
- 15. Làm cách nào tôi có thể đăng ký một chức năng để chỉ được gọi là * thành công * thoát khỏi chương trình Python của tôi?
- 16. Nó được gọi là gì khi bạn ghi đè lên một phương thức trong khi gọi một hàm tạo?
- 17. Xác định một hàm đã được gọi với PHP
- 18. .NET HttpListener: khi đăng ký cả HTTP & HTTPS tôi nhận được "xung đột với đăng ký hiện tại trên máy"
- 19. Python - Tồn tại một hàm được gọi khi một đối tượng không thực hiện một hàm?
- 20. Tại sao một lớp học được gọi là "được gọi" khi không được bắt đầu? - Python
- 21. Khi nào ServiceConnection.onServiceDisconnected() được gọi?
- 22. Làm thế nào để có được hàm tạo bản sao được gọi là trên một hàm tạo variadic?
- 23. registerReceiver cho Broadcast chỉ khi nó chưa được đăng ký?
- 24. Phương thức nào được gọi khi một QGraphicsItem được chọn
- 25. Android - Khi nào cần đăng ký/Hủy đăng ký người nhận phát sóng được tạo trong một hoạt động?
- 26. Trình đăng ký được lưu trữ bằng callee và người gọi là gì?
- 27. Safe Lua gọi hàm C++ đã đăng ký
- 28. Khi nào thì hàm tạo của trung tâm SignalR được gọi là?
- 29. Tại sao các biến mẫu được khởi tạo trước khi hàm tạo được gọi là?
- 30. @ ký tự trước khi gọi hàm
Về cơ bản, có. Từ ngữ trong tiêu chuẩn phức tạp hơn vì trong một chương trình đa luồng, "trước" và "sau" có các định nghĩa phức tạp và không phải lúc nào cũng hoạt động như bạn mong đợi. – aschepler
Với một lưu ý rằng 'construct' có nghĩa là * hàm tạo đã kết thúc * và chúng ta chỉ xem xét các đối tượng hoàn chỉnh, không phải là các căn cứ hoặc các thuộc tính. –