Trong C++ đoạn mã sau đưa ra một lỗi biên dịch:Destructors các loại BUILTIN (int, char vv ..)
void destruct1 (int * item)
{
item->~int();
}
Mã này là gần như nhau, tôi chỉ typedef int để một loại và một cái gì đó kỳ diệu xảy ra:
typedef int myint;
void destruct2 (myint * item)
{
item->~myint();
}
Tại sao mã thứ hai hoạt động? Có một int được một destructor chỉ vì nó đã được typedefed?
Trong trường hợp bạn tự hỏi tại sao người ta lại muốn làm điều này: Điều này xuất phát từ việc mã hóa lại mã C++. Chúng tôi đang loại bỏ heap tiêu chuẩn và thay thế nó bằng các hồ bơi tự tạo. Điều này đòi hỏi chúng ta phải gọi vị trí mới và các destructors. Tôi biết rằng việc gọi destructors cho các kiểu nguyên thủy là vô dụng, nhưng chúng ta vẫn muốn chúng trong mã trong trường hợp chúng ta thay thế POD bằng các lớp thực.
Phát hiện ra rằng int của thường không hoạt động nhưng những thứ được đánh máy thực sự là một điều bất ngờ.
Btw - Tôi có giải pháp liên quan đến chức năng mẫu. Chúng tôi chỉ cần gõ vào bên trong mẫu và mọi thứ đều ổn.
+1 cho "The Holy Standard". – ApprenticeHacker
Tôi nghĩ rằng đây là những gì làm cho std :: is_destructible nên không phù hợp trong các trình biên dịch cũ (2012-2014) – GameDeveloper
Không thể bỏ phiếu đủ câu trả lời này! – Nils