operator delete(void*, size_t)
doesn't invalidate pointers sufficientlySection: 17.6.3 [new.delete] Status: C++17 Submitter: Richard Smith Opened: 2014-08-29 Last modified: 2017-07-30
Priority: 0
View all other issues in [new.delete].
View all issues with C++17 status.
Discussion:
17.6.3.2 [new.delete.single]/12 says:
Requires:
ptr
shall be a null pointer or its value shall be a value returned by an earlier call to the (possibly replaced)operator new(std::size_t)
oroperator new(std::size_t,const std::nothrow_t&)
which has not been invalidated by an intervening call tooperator delete(void*)
.
This should say:
[…] by an intervening call to
operator delete(void*)
oroperator delete(void*, std::size_t)
.
Likewise at the end of 17.6.3.3 [new.delete.array]/11, operator delete[](void*, std::size_t)
.
[Urbana 2014-11-07: Move to Ready]
Proposed resolution:
Change 17.6.3.2 [new.delete.single]p12 as indicated:
-12- Requires:
ptr
shall be a null pointer or its value shall be a value returned by an earlier call to the (possibly replaced)operator new(std::size_t)
oroperator new(std::size_t,const std::nothrow_t&)
which has not been invalidated by an intervening call tooperator delete(void*)
oroperator delete(void*, std::size_t)
.
Change 17.6.3.3 [new.delete.array]p11 as indicated:
-11- Requires:
ptr
shall be a null pointer or its value shall be the value returned by an earlier call tooperator new[](std::size_t)
oroperator new[](std::size_t,const std::nothrow_t&)
which has not been invalidated by an intervening call tooperator delete[](void*)
oroperator delete[](void*, std::size_t)
.