Tôi rất nghi ngờ điều đó.
Có rất nhiều cách để giải phóng bộ nhớ, ví dụ bạn có thể sử dụng delete
trên mảng char
(thay vì delete[]
) và có thể hoạt động tốt. Tôi blogged chi tiết về điều này (xin lỗi vì tự liên kết, nhưng nó dễ dàng hơn viết lại tất cả).
Trình biên dịch không phải là vấn đề lớn như nền tảng. Hầu hết các thư viện sẽ sử dụng các phương pháp phân bổ của hệ điều hành cơ bản, có nghĩa là cùng một mã có thể hoạt động khác nhau trên Mac so với Windows so với Linux. Tôi đã thấy các ví dụ về điều này và mỗi một là mã có vấn đề.
Cách tiếp cận an toàn nhất là luôn phân bổ và giải phóng bộ nhớ bằng cách sử dụng cùng một kiểu dữ liệu. Nếu bạn đang phân bổ char
s và hoàn trả lại các mã khác, bạn có thể được tốt hơn off cung cấp cụ thể phân bổ/phương pháp deallocate:
SOME_STRUCT* Allocate()
{
size_t cb; // Initialised to something
return (SOME_STRUCT*)(new char[cb]);
}
void Free(SOME_STRUCT* obj)
{
delete[] (char*)obj;
}
(Quá tải các toán tử new
và delete
cũng có thể một tùy chọn, nhưng tôi chưa bao giờ thích làm điều này.)