Pointers in C After Delete
In C , memory management is crucial, and one key aspect is handling pointers after deleting an object. The following code raises questions about pointer validity after a deletion:
<code class="cpp">A* a = new A(); A* b = a; delete a; A* c = a; // illegal in C++11 A* d = b; // is it legal?</code>
Understanding Pointer Validity After Deletion
According to the C standard, referencing the storage pointed to by a pointer after the corresponding object has been deleted is undefined and may result in unpredictable behavior. This applies to both the original pointer (a in this case) and copies of that pointer (b).
In C 11, accessing the value of either a or b after deleting a is undefined behavior. The C 14 standard clarifies this behavior, stating that both actions have implementation-defined behavior. This means that the outcome depends on the specific implementation of the compiler or runtime environment.
Implementation-Defined Behavior
As mentioned before, C 14 considers using invalid pointers (including copies of deleted pointers) to have implementation-defined behavior. This means that different compilers or operating systems may handle these situations differently.
Some implementations may generate a system-generated runtime fault, while others may exhibit unpredictable behavior or terminate the program. Therefore, it's essential to avoid using pointers that refer to deleted objects, including copies of those pointers.
Conclusion
In summary, accessing the value of a pointer (or its copies) after deleting the associated object is dangerous and can lead to undefined or implementation-defined behavior. It's crucial to ensure that pointers always point to valid objects and to handle memory management appropriately to prevent such issues.
The above is the detailed content of Is Using a Pointer After Deleting the Object It Points to in C Legal?. For more information, please follow other related articles on the PHP Chinese website!