C++ Language/Indirection/SmartPointers/SmartCompilerTemporary

C++ creates a compiler-temporary for the new CRComplex(11,22) portion of std::unique_ptr<CRComplex> piVar(new CRComplex(11,22));. To guard against memory leaks from exceptions occuring before that compiler-temporary is given to the smart pointer, use std::make_unique<CRComplex>(11,22) in place of new CRComplex(11,22) (a std::make_unique<>() compiler-temporary is already a smart pointer as soon as it exists).

Additional information about smart compiler-temporaries (includes interactive examples)