Manually merged PR 145 for C.150 improvement

This commit is contained in:
hsutter 2015-12-02 12:07:43 -08:00
parent 19ee5fc18f
commit 866df49181

View File

@ -5873,6 +5873,7 @@ Avoid resource leaks.
##### Reason
`make_unique` gives a more concise statement of the construction.
It also ensures exception safety in complex expressions.
##### Example
@ -5880,6 +5881,19 @@ Avoid resource leaks.
auto q = make_unique<Foo>(7); // Better: no repetition of Foo
// Not exception-safe: the compiler may interleave the computations of arguments as follows:
//
// 1. allocate memory for Foo,
// 2. construct Foo,
// 3. call bar,
// 4. construct unique_ptr<Foo>.
//
// If bar throws, Foo will not be destroyed, and the memory allocated for it will leak.
f(unique_ptr<Foo>(new Foo()), bar());
// Exception-safe: calls to functions are never interleaved.
f(make_unique<Foo>(), bar());
##### Enforcement
* Flag the repetitive usage of template specialization list `<Foo>`