Просто для пояснения, использование make_unique
добавляет только безопасность исключений, когда у вас есть несколько распределений в выражении, а не только один, правильный? Например
void f(T*);
f(new T);
является абсолютно безопасным исключением (в отношении распределений и прочее), а
void f(T*, T*);
f(new T, new T);
нет, правильно?