Nó được biết rằng nếu một nhà xây dựng ném, sau đó tất cả các đối tượng phụ được xây dựng hoàn toàn sẽ bị phá hủy theo thứ tự ngược bao gồm dữ liệu thành viên và tất cả các loại lớp cơ sở. Các destructor không nhận được gọi là cho các nhà thầu không ủy nhiệm mặc dù. Đối với một hàm tạo ủy nhiệm, đối tượng đã được xây dựng khi phần thân của hàm tạo được nhập vào, nhưng việc xây dựng tiếp tục phần nào. Vì vậy, câu hỏi đặt ra cho dù destructor của lớp được gọi là, nếu các nhà xây dựng ủy nhiệm ném một ngoại lệ từ bên trong cơ thể của nó?Trình hủy có được gọi khi một nhà xây dựng ủy nhiệm ném không?
class X
{
public:
X();
X(int) : X() { throw std::exception(); } // is ~X() implicitely called?
~X();
};
'X' không phải là đối tượng thành viên của' X', vậy tại sao hàm hủy của nó lại được gọi? – Praetorian
@Praetorian: Bởi vì nó được xây dựng hoàn toàn bởi nhà xây dựng ủy nhiệm; và bởi vì tiêu chuẩn nói nó sẽ như thế. –
Liên quan: http://stackoverflow.com/q/14386840/981959 –