Никто не знает, магический шар куда-то укатился...
И правда. Антона здесь и правда нет...
Рефлексии в C++ не будет
Будет, не ссы
Будет, если смотреть оптимистично
Не, ну если смотреть оптимистично, то в C++ есть и проверки времён жизни, и не сломанная семантика перемещения
а в чём она сломанная?
В том, что к объекту можно обратиться после перемещения
Из-за этой "фичи" ты можешь получить нулевой unique_ptr
А ещё его можно получить если просто создать его дефолт конструктором. Вывод - дефолт конструкторы сломаны :D
У unique_ptr вообще не должно быть конструктора по умолчанию
Ну вот, ещё PIMPL запрещают...
Потому что ты не можешь материализовать валидный указатель из ничего
Звучит логично...
Пустой unique_ptr это не ничего, это указатель на null. Мы ему просто меняем значение - rebind
Ты ещё скажи, что NULL - это нормально
от NULL не убежать
Можно. Только никто не будет, потому что обратная совместимость — это священная корова комитета
Тебе в любом случае нужны nullable типы, так что от null не убежать
После перемещения старый -то объект находится во вполне валидном состоании, пожалуйста, обращайся к нему, на здоровье.
Только в C++ не-nullable указателей в принципе нет
#include <string> int main() { ([](std::string&& s){ return; })(0); }
На GCC завершает программу из-за std::logic_error, на Clang просто падает с segmentation fault
Боюсь, этот пример кода вызван некорректной интерпретацией происходящего. Со ссылкой здесь всё хорошо
Код на C++, который почему-то компилируется
Всё же, это проблема(?) дизайна std::string и работы с указателями, и никакого отношения к ссылкам она не имеет
Обсуждают сегодня