Каков наилучший способ передачи и передачи права собственности на вектор и его данные?
В идеальном мире он будет работать примерно так:
std::vector<int>& SpitAVector(int input)
{
std::vector<int> result;
result.push_back(input);
return result;
}
int main()
{
std::vector<int> myvec;
myvec = SpitAVector(60);
std::cout << (int)myvec[0] << std::endl; //Outputs 60
}
Это не работает, так как я возвращаю ссылку на локальную переменную.
Можно ли использовать boost::unique_ptr
или boost::shared_ptr
для обработки этого векторного вывода? (Невозможно использовать С++ 11 unique_ptr!)
Каков наилучший способ передачи и передачи права собственности на вектор и его данные?
Возвращает вектор по значению.
В С++ 11 или более поздней версии возвращаемое значение будет перемещено (если необходимо), поэтому, конечно, не будет массовой копии данных.
Если вы застряли в прошлом, убедитесь, что вы отвечаете критериям для копирования elision возвращаемого значения. Ваша функция, с одной точкой возврата, делает. Хотя это не требуется, любой достойный компилятор выполнит эту оптимизацию.
Можно ли использовать boost :: unique_ptr или boost :: shared_ptr для обработки этого векторного вывода?
Да, но это было бы излишне сложным. Просто вернитесь по значению.