благодаря guaranteed copy elision?
Есть в нынешнем C++ способ запретить объектам "убегать" из скоупа, в котором они созданы? 🤔
Вроде того, что ты написал - достаточно
using obj = Obj[1];
Но при этом все равно можно возвращать Obj. Какой-то хреновый костыль
ну так спрячьте настоящий тип Obj
При этом нужно добавлять вторые скобочки, если аргументов конструкторе больше одного
ну тогда задумайтесь зачем вам вообще запрещать мув даже в rvo контексте
Хороший вопрос. Мне такого не нужно было
А для чего такое поведение, если не секрет?
В общем-то хочется создать RAII обертку, которая назад по стеку убежать не может, только вглубь
Ну вроде отсутвие move, copy и assign конструкторов/методов достаточно, нет? Ведь наверх может убежать разве что ссылка или временный объект. Хотя в контексте RAII временный объект похож на проблему
Отлично компилится. Строка Obj o = make_Obj(10) Под идой выглядит как make_Obj(&v1, 10) Что и показывает сущность копи-елижн. Но стоит декларировать Obj& make_Obj(int) Как сразу все ломается - конструктор копии удален. Магия..
в твоем коде нельзя делать Obj& даже если бы мув и копи не были б удалены
Сущность копи элижн показывает стандарт, а не ида
Стандарт сущность описывает, и зачастую мутно. А Ида показавает, явно и прозрачно.
Обсуждают сегодня