Возврат объекта из функции в C++
В команде return локальный объект передают по имени переменной.
Локальную переменную внутри функции
можно вернуть по значению без функции
move: компилятор сам может
применить перемещение или опустить
лишний вызов конструктора.
Оборачивать локальное имя в функцию
move не нужно и часто мешает
оптимизации. Правильная форма -
return local;, где local
именованный объект того же класса.
Запишем фабрику make_box с возвратом
result по имени:
#include <iostream>
class Box {
public:
int* ptr;
Box() {
ptr = new int[1];
ptr[0] = 0;
}
Box(const Box& other) {
ptr = new int[1];
ptr[0] = other.ptr[0];
std::cout << "copy ctor\n";
}
Box(Box&& other) noexcept {
ptr = other.ptr;
other.ptr = nullptr;
std::cout << "move ctor\n";
}
~Box() {
delete[] ptr;
}
};
Box make_box() {
Box result;
result.ptr[0] = 64;
return result;
}
Сейчас примем объект из функции:
int main() {
Box item = make_box();
std::cout << item.ptr[0] << "\n";
return 0;
}
Напишите функцию, которая создает Crate
с буфером из одного int и возвращает
его командой return value; без
функции move. Сохраните результат
в переменную и выведите элемент буфера.