Is it required for user-defined and class-specific delete operators to ignore nullptr
as that operators from standard library do?
parallel discussion at google groups.
Is it required for user-defined and class-specific delete operators to ignore nullptr
as that operators from standard library do?
parallel discussion at google groups.
From [expr.delete],
If the value of the operand of the delete-expression is a null pointer value, it is unspecified whether a deallocation function will be called as described above.
So it sounds like your user defined or class specific delete operators to handle a nullptr
.
Elsewhere in [class.free], when describing deallocation functions for classes, classes with virtual destructors can have the deallocation function called based on the dynamic type. In that case the deallocation function would not need to check for nullptr.
delete ptr;
is a delete-expression that would call a deallocation function. –
Pedicular delete-expr nullptr
could call delete-function(nullptr)
. Still, as far as I understand, it does not set explicit requirements on delete-function
to have no effects for nullptr
argument. –
Wassyngton From [basic.stc.dynamic]:
Any allocation and/or deallocation functions defined in a C++ program, including the default versions in the library, shall confrm to the semantics specified in 3.7.4.1 and 3.7.4.2.
From [basic.stc.dynamic.deallocation]:
The value of the first argument supplied to a deallocation function may be a null pointer value; if so, and if the deallocation function is one supplied in the standard library, the call has no effect.
If the argument given to a deallocation function in the standard library is a pointer that is not the null pointer value (4.11), the deallocation function shall deallocate the storage referenced by the pointer, ending the duration of the region of storage.
It's required that the deallocation function have no effect if provided a null pointer value. That basically is the same thing as requiring that the deallocation function ignore null pionter values.
nullptr
. While the standard clearly wants custom deallocation functions to have the same semantics as the standard library ones, the C++ committee can't hire a squad of goons to go to every programmer's house or workplace and make sure they actually do so. Thus, the only ones that the standard can say are 100% guaranteed to be fully compliant are the ones in the standard library itself. –
Cameroncameroon © 2022 - 2024 — McMap. All rights reserved.
delete
expression and the section about user-defineddelete
operators are probably a good place to start. @GreenTree – Seibelnullptr
it does nothing, even if you defined your owndelete
operator: "If expression is not a null pointer, ..." then "After that, ... the delete expression invokes the deallocation function". cppreference might not necessarily have it correct enough for language-lawyer purposes, though – Immolatedelete obj
wouldn't meanoperator delete(obj)
; there would also be other "magic" that happens so that it looks a little bit more likeif (obj != nullptr) operator delete(obj)
– Immolate