Просто чтобы уточнить, использование make_unique
повышает безопасность исключений только тогда, когда у вас есть несколько распределений в выражении, а не только одно, верно? Например
void f(T*);
f(new T);
совершенно безопасен для исключений (в отношении выделений и прочего), в то время как
void f(T*, T*);
f(new T, new T);
не является правильным?
make_unique
илиunique_ptr
в ваших примерах, потому что? - person Yakk - Adam Nevraumont   schedule 20.10.2013multiple allocations in an expression
, но каждое из этих выделений черезnew T
является отдельным выражением, так что получается наоборот: одно выделение на каждое из нескольких выражений. То, что вызов функции сам по себе является выражением, содержащим два других, не меняет этого. Но если не считать формулировки, вы были на правильном пути. Насколько я читал, правило, сформулированное Саттером, состоит в том, чтобы выполнять каждое выделение в своем собственном операторе или последовательно возвращать их из отдельного вызова функции, тем самым избегая странного упорядочения. и утечки: gotw.ca/gotw/056.htm (старое-но-доброе ) - person underscore_d   schedule 13.08.2016