nếu một nhà xây dựng đưa ra ngoại lệ, những gì trình phá hủy được chạy?
Cấu trúc của tất cả các đối tượng được tạo hoàn toàn trong phạm vi đó.
Điều đó có tạo nên sự khác biệt nào nếu ngoại lệ nằm trong danh sách khởi tạo hoặc nội dung không?
Tất cả các đối tượng đã hoàn thành sẽ bị hủy.
Nếu hàm tạo không bao giờ được gọi là đối tượng hoàn toàn không bao giờ được xây dựng và do đó không thể bị hủy.
Còn thừa kế và thành viên thì sao? Có lẽ tất cả các công trình xây dựng hoàn thành đều bị phá hủy. Nếu chỉ có một số thành viên được xây dựng, thì chỉ những thành viên mới bị phá hủy? Nếu có nhiều thừa kế, tất cả các nhà xây dựng đã hoàn thành có bị hủy không? Liệu thừa kế ảo có thay đổi gì không?
Tất cả các công trình hoàn thành sẽ bị hủy. Có, chỉ các đối tượng được tạo hoàn toàn mới bị hủy.
Tốt đọc:
Constructor Failures by Herb Sutter
Đặc biệt, tình yêu là một phần trong đó ông giải thích:
Về sinh học, quan niệm đã diễn ra - các nhà xây dựng đã bắt đầu - nhưng dù những nỗ lực tốt nhất nó đã được theo sau bởi một sẩy thai - các nhà xây dựng không bao giờ chạy đến hạn (ination).
Ngẫu nhiên, đây là lý do tại sao một destructor sẽ không bao giờ được gọi nếu các nhà xây dựng đã không thành công - không có gì để tiêu diệt. "Nó không thể chết, vì nó không bao giờ sống." Lưu ý rằng điều này làm cho cụm từ "một đối tượng có hàm tạo đã ném một ngoại lệ" thực sự là một oxymoron. Một thứ như vậy thậm chí còn ít hơn một đối tượng cũ ... nó chưa bao giờ sống, chưa bao giờ, chưa bao giờ thở đầu tiên.
Nguồn
2012-04-18 15:35:15
Có lý do nào khiến bạn không tự mình thử nghiệm điều này không? –
@Steve: Bởi vì dựa vào hành vi của một phiên bản trình biên dịch cụ thể là một ý tưởng khủng khiếp nếu bạn muốn mã di động hoặc có thể duy trì. –
@BenVoigt - Tôi đồng ý về mặt lý thuyết. Nhưng khi bạn đang viết mã trong thế giới thực, bạn phải đối phó với thực tế. Và tôi sẽ vô cùng ngạc nhiên nếu tất cả các trình biên dịch chính không có được quyền này. –