Возврат контейнеров stl из функций

Каков наилучший (с точки зрения производительности) способ возврата контейнеров stl из функции? Возвращаемый контейнер обычно содержит несколько тысяч элементов.

Метод 1:

typedef std::list<Item> ItemContainer;

ItemContainer CreateManyItems() {
    ItemContainer result;

    // fill the 'result' ...

    return result;
}

ItemContainer a = CreateManyItems();

Метод 2:

void CreateManyItems(ItemContainer &output) {
    ItemContainer result;

    // fill the 'result' ...

    output.swap(result);
} 

ItemContainer a;
CreateManyItems(a);

Метод 3:

void std::auto_ptr<ItemContainer> CreateManyItems() {
    std::auto_ptr<ItemContainer> result(new ItemContainer);

    // fill the 'result' ...

    return result;
}

std::auto_ptr<ItemContainer> a = CreateManyItems();

Или есть лучший способ?

13
задан Juraj Blaho 13 May 2011 в 11:07
поделиться