Здравствуйте, AlexGin, Вы писали:
AG>Но это зависит от задачи.
AG>Например: зачем мне перемещать объект, если он нужен именно эдесь?
потому что вы отдали владение
Компонент может запросто грохнуть ваш объект или скопировать в другую область памяти. У вас же не возникает вопросов почему здесь UB
std::vector<int> v = {0, 1, 42};
auto& front = v.front();
v.push_back(43);
std::cout << front;
Rust ваш код тоже не пропустит дальше. Это базовая проверка валидности кода. Если она провалена, то можно придумать кучу случаев когда код сломается.
Опять же в Java всё ок. Вот почему у меня и претензии к Qt. Он ласково шепчет, что можешь обо всём забыть и работать как в Java. Но по факту ты по-прежнему в С++. А тут такое беззаботное отношение к владению недопустимо.
AG>Гарантировать, что будет дальше — ни в каком случае не возможно. Даже, если кажется, что от всех ошибок защитился!
можно конечно, если придерживаться простых правил. Core guidline не просто так придумывали. Одно из таких правил — не использовать голые указатели.
SP>>Не, конечно можно лазить по документациям, но это мартышкин труд.
AG>Не понял, к чему Вы относите данную фразу?
имел в виду, что эту работу можно было не делать, если бы фукнция была спроектирована как-то так
void addWidget(std::unique_ptr<Widget> w);
Здесь не нужна документация чтобы понять, что владение теряется. Сигнатура фукнции должна сама документировать, что происходит внутри.
AG>Ну передавай ссылку, а не указатель.
AG>Однако, не везде это прокатит: нулевой ссылки, в отличие от Java и .NET, в C++ быть не может.
Да, не везде. C++ не идеален.