Путь 1 просто отлично. RVO и NRVO пнут здесь. Даже если этого не произойдет, вы все равно сможете «swaptimize», предполагая, что CArray делает умную вещь и имеет функцию подкачки.
CArray<BigSizeClass> result;
test().swap(result);
Однако я бы рекомендовал не использовать CArray - он не использует конструктор копирования, а вместо этого использует memcpy
, что является ужасно неопределенным поведением для любых не POD-классов.