...
When using the nonthrowing form, it is imperative to check that the return value is not nullptr
before accessing the resulting pointer. When using either form, be sure to comply with ERR50-CPP. Do not call std::terminate(), std::abort(), or std::_Exit()abruptly terminate the program.
Noncompliant Code Example
...
Consider the situation in which A
is allocated and constructed first, and then B
is allocated and throws an exception. Wrapping the call to g()
in a try
/catch
block is insufficient because it would be impossible to free the memory allocated for A
.
This noncompliant code example is a specific instance of also violates EXP50-CPP. Do not depend on the order of evaluation for side effects, because the order in which the arguments to g()
are evaluated is unspecified.
Compliant Solution (std::unique_ptr
)
...