Если я использую 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 вообще создает два автоматических объекта?
Как мне оптимизировать заполнение такой большой структуры данных с помощью функции?