[Bug libstdc++/69879] New: Create a pointer to the default operator new and delete
daniel.gutson at tallertechnologies dot com
gcc-bugzilla@gcc.gnu.org
Fri Feb 19 21:55:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69879
Bug ID: 69879
Summary: Create a pointer to the default operator new and
delete
Product: gcc
Version: 5.2.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: daniel.gutson at tallertechnologies dot com
Target Milestone: ---
This issue comes from the following discussion:
https://gcc.gnu.org/ml/libstdc++/2015-11/msg00009.html
In short: Pedro Alves suggested as a solution the addition of a pointer to the
original (default) operator new and another for the operator delete, e.g.
__default_operator_new and __default_operator_delete.
This will allow users to override the global operators new and delete, and yet
call the original implementations, for example to alter the behavior when there
is no memory and the nothrow new should not iterate calling the new_handler.
// Example 1:
void* operator new ( std::size_t count, const std::nothrow_t& tag)
noexcept(true)
{
const auto old_handler = std::set_new_handler(nullptr);
const auto ret = __default_operator_new(count, tag);
std::set_new_handler(old_handler);
return ret;
}
// Slightly different example:
void* operator new ( std::size_t count, const std::nothrow_t& tag)
noexcept(true)
{
const auto old_handler = std::set_new_handler(nullptr);
const auto ret = __default_operator_new(count, tag);
std::set_new_handler(old_handler);
if (ret == nullptr && old_handler != nullptr)
old_handler();
return ret;
}
Please assign this to aurelio.remonda@tallertechnologies.com
More information about the Gcc-bugs
mailing list