2012-06-26 32 views

Trả lời

8

Các hàm có tên 'scalar deleting destructor''vector deleting destructor' là các hàm trợ giúp được tạo bởi trình biên dịch VC khi tạo mã cho câu lệnh delete. Đừng nhầm lẫn chúng với destructor lớp mà cũng có thể được tạo ra bởi trình biên dịch. Các cựu có thể được thể hiện bằng giả như

void scalar_deleting_destructor(A* pa) 
{ 
pa->~A(); 
A::operator delete(pa); 
} 

và sau này như

void vector_deleting_destructor(A* pa, size_t count) 
{ 
for (size_t i = 0; i < count; ++i) 
pa[i].~A(); 
A::operator delete[](pa); 
} 
+1

Cảm ơn, Andrey. Tôi là một chút nhầm lẫn về các nhà điều hành xóa bên trong ở đây. Vô hướng xóa destructor này là trình biên dịch được tạo ra và nó được gọi bằng 'delete a', đúng không? Có vẻ như các cuộc gọi bên trong để xóa nguyên nhân đệ quy? – Thomson

+3

@Thomson Hãy để tôi cố gắng làm cho nó rõ ràng hơn. 'delete a' là một * delete statement *, tức là một cấu trúc ngôn ngữ, không bị nhầm lẫn với toán tử' A :: delete', là toán tử * delete *, một hàm thực sự giải phóng bộ nhớ. Tôi không có tiêu chuẩn C++ ngay bây giờ, tôi có thể cung cấp tài liệu tham khảo một chút sau đó. – Andrey

Các vấn đề liên quan