Ваш код не имеет реальной проблемы, потому что массивы распадаются на указатели 1 при передаче таким образом (по значению). Тем не менее, следующее наверняка будет больше C ++:
typedef std::vector<std::unique_ptr<Foo> > FooVec; // dynamic size
typedef std::array<std::unique_ptr<Foo>, 10> FooArr; // fixed size (10)
void doWork( FooVec& x ) // or FooArr&
{
// I want assignments to x to impact caller's arr
}
int main()
{
FooVec vec(10);
FooArr arr;
doWork( vec );
}
1 Другими словами, это эквивалентно
void doWork( unique_ptr<Foo> *x )
Чтобы остановить распад, пройдите по ссылке:
void doWork( unique_ptr<Foo> (&x)[10] )