const auto f1{move(x.f1)};
const auto f2{move(x.f2) };
}
с оптимизациями превратится в вызов деструкторов in-place?
Или как можно его улучшить?
Гарантируется, что X умрёт в скоупе, в котором эта функция вызывается
Деструкторы f1 f2 очевидно вызовутся и поля в них мувнутся предварительно. А что ещё можно ожидать?
Да... И я в раздумьях, можно ли переписать этот костыль лучше
А в чем костыль? Ну мувнул состояние и что?
Фактически - это аналог .reset() для нескольких полей. Нужен для разрыва цепочки зависимостей: x.f через некие системные вызовы держит CoW-ссылку на X
Мысли в слух. Не perf-critical
Нет не гарантируется, Мне не нравится, что x передается в функцию по ссылке, лучше через указатель
Чем лучше, кроме ggl-code-style?)
Такая передача явно показывает, что объект в функции меняется, таким образом повышаем читабельность кода
а по ссылке - не показывает?
Если хочешь иметь гарантии, принимай unique_ptr
Обычно ссылки константные в функции, тем самым создаётся некоторая путаница для читающего)
Эээ, ему надо ресетнуть часть объекта
А, он в Вопросе написал, что хочет уничтожить X, а не часть из X
Обсуждают сегодня