This answer dấu ngoặc kép C++ chuẩn 3.8:Tại sao không xóa một đối tượng có một destructor với một tác dụng phụ undefined hành vi trong C + + 11? 11
nếu không có cuộc gọi rõ ràng để các destructor hoặc nếu một delete-biểu thức (5.3.5) không được sử dụng để giải phóng lưu trữ, destructor không được được gọi ngầm và bất kỳ chương trình nào phụ thuộc vào các e ff ects phụ được tạo ra bởi destructor có hành vi chưa được xác định.
Phần về trình hủy không được gọi là rõ ràng. Bây giờ giả sử bỏ qua destructor có một tác dụng phụ mà nên có ảnh hưởng đến hành vi của chương trình.
Tại sao hành vi chương trình không được xác định ngay bây giờ? Tại sao các tác dụng phụ sẽ không bị bỏ qua (vì destructor không được gọi) và chương trình chạy bình thường mà không có tác dụng phụ được áp dụng?
Câu hỏi thú vị. Nhưng tại sao một người nào đó không muốn gọi destructor trên một đối tượng khi nó không còn cần thiết? – ereOn
Nếu destructor trong trường hợp này thực hiện các nhiệm vụ không tầm thường cho ví dụ: Đóng các trình điều khiển tài nguyên hoặc thiết lập trạng thái thành một cái gì đó hợp lệ vv, thì hàm hủy không được gọi là ofcourse sẽ ảnh hưởng đến chương trình và sẽ dẫn đến hành vi không xác định. để bỏ qua các tác dụng phụ. –
@ereOn: Singletons đã được đề cập như là một trường hợp sử dụng (tuy nhiên, điều này không nên được coi là thiết kế tốt mặc dù). –