Re[5]: Про указатели в Qt - нравится ли вам?
От: sergii.p  
Дата: 05.10.23 10:33
Оценка: 1 (1) +1
Здравствуйте, 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++ не идеален.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.