есть функция, которая возвращает объект класса, для которого перегружен оператор move-присваивания:
A GetA() { return A{ .a = 42 }; }
Я хочу сделать:
A _a = GetA();
Не вызывая деструктор для созданного rvalue.
Нашёл примеры реализации такой штуки с использованием PIMPL: через создание класса-враппера, содержащего указатель на реализацию. move-оператор объявляется для враппера и выполняет копирование указателя на реализацию. Так сделано в libpoco, например.
А как-то проще нельзя? Может, есть какие-то стандартные средства языка?
именно rvalue - нет. Но само перемещение не вызывает никаких деструкторов. Это просто окончание жизни вызывает деструктор
ого, вы пишете на C++20 ? T object { .designator = arg1 , .designator { arg2 } ... }; (4) (since C++20)
Одумайся
Не вызывать деструктор нельзя
Обсуждают сегодня