оптимизация возвращаемого значения по сравнению с авто _ptr для больших векторов

Если я использую auto _ptr в качестве возвращаемого значения функции, которая заполняет большие векторы, это делает функцию исходной функцией (он создаст внутренний автоматический _указатель и передаст право собственности, когда вернет непостоянный автоматический _указатель ). Однако я не могу использовать эту функцию с алгоритмами STL, потому что для доступа к данным мне нужно разыменовать auto _ptr. Думаю, хорошим примером может быть поле векторов размера N, где каждый вектор имеет 100 компонентов. Независимо от того, возвращает ли функция каждый 100-компонентный вектор по значению или по ссылке, это не одно и то же, если N велико.

Кроме того, когда я пробую этот очень простой код,:

class t
{
    public: 
         t() { std::cout << "ctor" << std::endl; }
         ~t() { std::cout << "dtor" << std::endl; }
};

t valueFun()
{
   return t();
}

std::auto_ptr<t> autoFun()
{
   return std::auto_ptr(new t());
}

вызовы autoFun и fun приводят к результату

Ctor Dtor

, поэтому я не могу увидеть автоматическую переменную, которая создается для передачи оператору return. Означает ли это, что для вызова valueFun задана оптимизация возвращаемого значения? В этом случае valueFun вообще создает два автоматических объекта?

Как мне оптимизировать заполнение такой большой структуры данных с помощью функции?

5
задан tmaric 4 May 2012 в 13:33
поделиться