Một đơn giản ứng dụng thử nghiệm:C++ new int [0] - nó sẽ cấp phát bộ nhớ?
cout << new int[0] << endl;
kết quả đầu ra:
0x876c0b8
Vì vậy, nó trông giống như nó hoạt động. Tiêu chuẩn nói gì về điều này? Nó luôn luôn là hợp pháp để "phân bổ" khối trống của bộ nhớ?
+1 Câu hỏi rất thú vị - mặc dù tôi không chắc là nó quan trọng đến mức nào trong mã thực. – Zifre
@Zifre: Tôi yêu cầu sự tò mò, nhưng nó có thể quan trọng trong thế giới thực, ví dụ: khi kích thước của khối bộ nhớ được phân bổ được tính theo một cách nào đó, và kết quả của phép tính có thể bằng 0, thì không cần phải thêm ngoại lệ để không phân bổ khối có kích thước bằng 0 .. Vì chúng phải được cấp phát và xóa mà không có lỗi (nếu chỉ khối có kích thước bằng 0 không bị hủy tham chiếu). Vì vậy, nói chung điều này cho phép trừu tượng hóa rộng hơn về khối bộ nhớ. –
@ emg-2: Trong trường hợp ví dụ của bạn, nó thực sự sẽ không quan trọng, bởi vì xóa [] là hoàn toàn hợp pháp trên một con trỏ NULL :-). –