аллоцирует память ещё во время вызова предыдущей функции, а при вызове функции с RVO та просто записывает результат с выделенный кусок стека предыдущей функции?
2. Юники можно спокойно возвращать из функций. Например, если мне понадобился кастомный make_unique, то код вида return std::unique_ptr(x); безопасен?
3. RVO и его поведение это строго зафиксированный документ в языке.
4. Если компилятор по каким-то причинам не поддерживает RVO, то будет возвращена просто копия юника. Объект в скоупе юника при этом не умрет.
5. Когда я принимаю юник, я не дожен ничего мувать, так как в случае с RVO я и так получу напрямую объект, а в случае без -- обычную безопасную копию. То есть код вида auto a = custom_make_unique(create_pointer()); вполне безопасен.
1. Да, только аллекации на стэке 3. Кажется только с c++17 и то, кажется не все типы
Читай про copy elision (RVO если грубо) - https://en.cppreference.com/w/cpp/language/copy_elision
5. он безопасен только если custom_make_unique - noexcept
И что ты вообще понимаешь под "безопасностью"?
4 КОПИЙ UNIQUE_PTR НЕ БЫВАЕТ!
Обсуждают сегодня