According to this
void operator delete (void*); (1)
void operator delete[](void*); (2)
void operator delete (void*, const std::nothrow_t&); (3)
void operator delete[](void*, const std::nothrow_t&); (4)
void operator delete(void*, std::size_t) (5)
void operator delete[](void*, std::size_t) (6)
void operator delete(void*, std::size_t, const std::nothrow_t&) (7)
void operator delete[](void*, std::size_t, const std::nothrow_t&) (8)
(5-8) Called instead of (1-4) if a user-defined replacement is provided. The standard library implementations are identical to (1-4).
I believe the cited statement is correct; however, I cannot confirm it as per the draft C++14 standard n3797 .
I examined 3.7.4 and 18.6, and found nothing to explicitly require the delete expression must call void ::operator delete(void*, std::size_t)
instead of void ::operator delete(void*)
if the former exists.
Could you refer me to the right page of the draft standard?
The selection of deallocation functions is explained in:
5.3.5 Delete [expr.delete]
10 If the type is complete and if deallocation function lookup finds both a usual deallocation function with only a pointer parameter and a usual deallocation function with both a pointer parameter and a size parameter, then the selected deallocation function shall be the one with two parameters. Otherwise, the selected deallocation function shall be the function with one parameter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With