Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpMvRt 126 of 150 menu
◀ ▶

Возврат объекта из функции в 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. Сохраните результат в переменную и выведите элемент буфера.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить