Home > Article > Backend Development > Why Doesn't `delete` Automatically Set the Pointer to NULL in C ?
Why Delete Does Not Automatically Set Pointer to NULL
Despite its potential benefits in preventing invalid pointer-related crashes, the C standard does not mandate that the delete operator automatically sets the pointer to NULL after deallocating memory. The reasons for this decision are multifaceted.
Performance
Adding an instruction to set the pointer to NULL could potentially slow down the performance of the delete operation. While this may be negligible for most applications, it could impact performance-critical systems.
Constants
Const pointers present a potential challenge. Setting a const pointer to NULL would violate its immutability, leading to undefined behavior. However, the standard could have provided a special case for const pointers, allowing them to be set to NULL.
Argument Flexibility
The standard explicitly permits delete's argument to be an rvalue, not just an lvalue. For example, deleting an array involves specifying the array name as an argument: delete [] array;. In such cases, it is not possible to set the pointer to NULL since it does not point to a valid memory location after deletion.
Other Considerations
Bjarne Stroustrup, the creator of C , acknowledges the potential benefits of automatic NULL-setting during deletion but notes that implementers have not widely adopted this practice. He also emphasizes the need for programmers to be vigilant about ensuring that pointers are properly handled after deallocation.
In summary, while automatic NULL-setting by delete would have benefits, the C standard opted not to mandate it due to performance concerns, the need to accommodate certain cases, and the importance of programmer responsibility in managing pointers.
The above is the detailed content of Why Doesn't `delete` Automatically Set the Pointer to NULL in C ?. For more information, please follow other related articles on the PHP Chinese website!