Trong c++03
nó là khá rõ ràng là việc xóa một con trỏ null không có tác dụng. Thật vậy, nó được tuyên bố rõ ràng §5.3.5/2
rằng:
Trong một trong hai cách thay thế, nếu giá trị của toán hạng xóa là con trỏ null thì hoạt động không có hiệu lực.
Tuy nhiên, trong dự thảo hiện tại cho c++0x
câu này dường như bị thiếu. Trong phần còn lại của bản nháp, tôi chỉ có thể tìm thấy các câu nêu rõ điều gì sẽ xảy ra nếu toán hạng của biểu thức xóa không phải là hằng số con trỏ null. Việc xóa con trỏ null vẫn được xác định ở đâu c++0x
và nếu có thì ở đâu?
Ghi chú:
Có bằng chứng hoàn cảnh quan trọng cho thấy nó vẫn còn được xác định rõ.
Đầu tiên, có hai câu §5.3.5/2
nói rằng
Trong phương án thay thế đầu tiên (đối tượng xóa), giá trị của toán hạng xóa có thể là giá trị con trỏ null, ...
và
Trong phương án thứ hai (xóa mảng), giá trị của toán hạng xóa có thể là giá trị con trỏ null hoặc ...
Những điều này nói rằng toán hạng được phép là null, nhưng tự chúng không thực sự xác định điều gì sẽ xảy ra nếu đúng như vậy.
Thứ hai, việc thay đổi ý nghĩa của delete 0
là một thay đổi mang tính đột phá lớn, và ủy ban tiêu chuẩn sẽ rất khó thực hiện thay đổi cụ thể này. Hơn nữa, không đề cập đến việc đây là một thay đổi đột phá trong Phụ lục Tương thích (Phụ lục C) của c++0x
dự thảo. Tuy nhiên, Phụ lục C là một phần Thông tin, vì vậy điều này không có nghĩa là không giải thích tiêu chuẩn.
Mặt khác, thực tế là việc xóa con trỏ null được yêu cầu không có hiệu lực ngụ ý kiểm tra thời gian chạy bổ sung. Trong rất nhiều mã, toán hạng không bao giờ có thể là giá trị rỗng, vì vậy việc kiểm tra thời gian chạy này mâu thuẫn với nguyên tắc chi phí bằng không. Có thể ủy ban vừa quyết định thay đổi hành vi để mang lại chuẩn c ++ phù hợp hơn với các mục tiêu thiết kế đã nêu của ngôn ngữ.