Re[6]: Про указатели в Qt - нравится ли вам?
От: Skorodum Россия  
Дата: 04.10.23 12:43
Оценка:
Здравствуйте, so5team, Вы писали:

S>Все еще проще: на момент начала работ над Qt эксперименты Степанова и Ли над тем, что потом станет STL, только-только получили широкую известность. Ну а допилили STL от Степанова до того STL, что мы получили в C++98, только во время работы над первым стандартом (т.е. где-то реально в промежуток между 1994-м и 1998-м годом). Т.е. авторы Qt были вынуждены делать свою "стандартную" библиотеку. Чем, впрочем, тогда многие занимались (что-то похожее было и в MFC, и в wxWindows, и в OWL).

Да, но vsb говорил про Qt4, первый релиз в 2005-м. В теории контейнеры типа QVector можно было бы заменить, но на практике, наверное было много проблем, а бенефитов от этого особо нет.
QString и ко не заменить.
Re[7]: Про указатели в Qt - нравится ли вам?
От: night beast СССР  
Дата: 04.10.23 12:51
Оценка:
Здравствуйте, Skorodum, Вы писали:

S>Да, но vsb говорил про Qt4, первый релиз в 2005-м. В теории контейнеры типа QVector можно было бы заменить, но на практике, наверное было много проблем, а бенефитов от этого особо нет.


QVector это тоже COW (по крайней мере был)
заменить особо не на что
Re[6]: Про указатели в Qt - нравится ли вам?
От: Skorodum Россия  
Дата: 04.10.23 12:54
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Единственная фича С++, которую может быть разумно не использовать это исключения из-за их нетривиальной реализации. Если программа работает на микроконтроллере, эту цену может не захотеться платить. Но Qt не работает на таких слабых платформах.

Сейчас Cortex A7 достаточно.

vsb>Исторические нюансы я понимаю, но моего мнения это не меняет, в 2023 году код на Qt выглядит чужеродно.

Шаблонов мало или camelCase не любишь?
Re[2]: Про указатели в Qt - нравится ли вам?
От: Skorodum Россия  
Дата: 04.10.23 12:58
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>
SP>void addLabelToLayout(QLayout& layout) {
SP>    layout.addWidget(new QLabel("my label"));
SP>}

SP>void addLabelToLayout(QLayout& layout) {
SP>    QLabel l = QLabel("my label");
SP>    layout.addWidget(&l);
SP>}
SP>


SP>C точки зрения С++, первое — явная ересь с утечкой памяти и следует предпочесть второй путь, а с точки зрения Qt всё ровно наоборот.

Вообще-то с точки зрения С++ второй вариант — ересь
Re[7]: Про указатели в Qt - нравится ли вам?
От: so5team https://stiffstream.com
Дата: 04.10.23 13:01
Оценка:
Здравствуйте, Skorodum, Вы писали:

S>Да, но vsb говорил про Qt4, первый релиз в 2005-м. В теории контейнеры типа QVector можно было бы заменить, но на практике, наверное было много проблем, а бенефитов от этого особо нет.


Это вряд ли, поломалась бы совместимость с тем, что было написано ранее. А перевод с Qt3 на Qt4 был не такой уж и болезненный, из главного вспоминается разве что другое именование заголовочных файлов. В своих концепциях же Qt не менялся в то время вообще.
Re[2]: Про указатели в Qt - нравится ли вам?
От: SaZ  
Дата: 04.10.23 13:02
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>...


SP>
SP>void addLabelToLayout(QLayout& layout) {
SP>    layout.addWidget(new QLabel("my label"));
SP>}

SP>void addLabelToLayout(QLayout& layout) {
SP>    QLabel l = QLabel("my label");
SP>    layout.addWidget(&l);
SP>}
SP>


SP>C точки зрения С++, первое — явная ересь с утечкой памяти и следует предпочесть второй путь, а с точки зрения Qt всё ровно наоборот.


Где тут утечка? Первый случай корректный, вы создали объект и передали владение в лэйаут. Теперь это забота лэйаута.
Второй случай — вы создали объект на стеке, поместили в лэйаут, и тут же удалили при выходе из скоупа (функции). Тоже всё корректно.

SP>Подытоживая, сейчас парадигма Qt выглядит неправильно.


Неправильно относительно чего? Это просто другая парадигма управления памятью, которая тоже имеет место быть. И во многих случаях тут куда меньше оверхеда, чем со смартпоинтерами.
То что в stl есть только unique/shared вовсе не значит что нельзя использовать другие парадигмы. Лично мне для GUI очень нравится подход — создал, указал куда всунуть (парент), забыл. И всё само работает.
Теоретически можно было бы всё перефигачить на rvalue + std::move, но зачем? Это получился бы новый фреймворк.
Отредактировано 04.10.2023 13:04 SaZ . Предыдущая версия .
Re[8]: Про указатели в Qt - нравится ли вам?
От: Skorodum Россия  
Дата: 04.10.23 13:03
Оценка:
Здравствуйте, night beast, Вы писали:

NB>QVector это тоже COW (по крайней мере был)

NB>заменить особо не на что
Мне кажется это куда менее полезная фича в целом. (Лично я старался никогда не полагаться на то, что не будет копирования массивов.)
Есть пример кода, где оно реально полезно, и по другому сложно сделать?
Re[9]: Про указатели в Qt - нравится ли вам?
От: night beast СССР  
Дата: 04.10.23 13:10
Оценка: 1 (1) +1
Здравствуйте, Skorodum, Вы писали:

NB>>QVector это тоже COW (по крайней мере был)

NB>>заменить особо не на что
S>Мне кажется это куда менее полезная фича в целом. (Лично я старался никогда не полагаться на то, что не будет копирования массивов.)

это оптимизация

S>Есть пример кода, где оно реально полезно, и по другому сложно сделать?


сигналы, передающие QVector
Re[3]: Про указатели в Qt - нравится ли вам?
От: night beast СССР  
Дата: 04.10.23 13:40
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>То что в stl есть только unique/shared вовсе не значит что нельзя использовать другие парадигмы. Лично мне для GUI очень нравится подход — создал, указал куда всунуть (парент), забыл. И всё само работает.


безотносительно Qt мне нравится принцип питона: "явное лучше, чем неявное"
то есть я смотря только на код должен не влезая во внутреннее устройство понимать, что происходит с владением объекта
Re[4]: Про указатели в Qt - нравится ли вам?
От: Alekzander  
Дата: 04.10.23 14:36
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>2. Куча классов, дублирующих стандартную библиотеку. QString, QList и подобное.


Потому, что стандартная библиотека — говно.
Re[5]: Про указатели в Qt - нравится ли вам?
От: Shmj Ниоткуда  
Дата: 04.10.23 19:37
Оценка: :))
Здравствуйте, Alekzander, Вы писали:

A>Потому, что стандартная библиотека — говно.


А обоснование? Ведь ее делают лучшие умы мира можно сказать, а QT всего лишь незначительный коммерческий продукт — один из многих.
Re[2]: Про указатели в Qt - нравится ли вам?
От: AlexGin Беларусь  
Дата: 04.10.23 23:40
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>
SP>void addLabelToLayout(QLayout& layout) {
SP>    layout.addWidget(new QLabel("my label"));
SP>}

SP>void addLabelToLayout(QLayout& layout) {
SP>    QLabel l = QLabel("my label");
SP>    layout.addWidget(&l);
SP>}
SP>


Первый вариант — выглядит вполне корректно и логично (как для C++, так и для Qt).
Второй вариант — выглядит стрёмно: сохранили адрес локальной (стековой) переменной.
Он, как и сама переменная, потеряет смысл после выхода из метода (функции).

SP>C точки зрения С++, первое — явная ересь с утечкой памяти и следует предпочесть второй путь,


Почему же?
Адрес объекта в куче сохранён в коллекции.
Что не так?
Что мешает впоследствии удалить этот объект?

SP>Подытоживая, сейчас парадигма Qt выглядит неправильно.


Она и сейчас весьма актуальна, просто появились новые инструменты (прежде всего — для GUI developing).
Отредактировано 05.10.2023 0:07 AlexGin . Предыдущая версия . Еще …
Отредактировано 04.10.2023 23:42 AlexGin . Предыдущая версия .
Re[3]: Про указатели в Qt - нравится ли вам?
От: AlexGin Беларусь  
Дата: 04.10.23 23:50
Оценка:
Здравствуйте, SaZ, Вы писали:

SP>>
SP>>void addLabelToLayout(QLayout& layout) {
SP>>    layout.addWidget(new QLabel("my label"));
SP>>}

SP>>void addLabelToLayout(QLayout& layout) {
SP>>    QLabel l = QLabel("my label");
SP>>    layout.addWidget(&l);
SP>>}
SP>>


SaZ>Где тут утечка? Первый случай корректный, вы создали объект и передали владение в лэйаут. Теперь это забота лэйаута.

+100500

SaZ>Второй случай — вы создали объект на стеке, поместили в лэйаут, и тут же удалили при выходе из скоупа (функции). Тоже всё корректно.

Какой смысл действий в этом случае?
Мёртвый указатель в лейоуте...
Re: Про указатели в Qt - нравится ли вам?
От: AlexGin Беларусь  
Дата: 05.10.23 00:12
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот, в QT QObject имеет свою парадигму управления памятью, без использования вумных указателей. Правильно ли это с вашей точки зрения?


Эта парадигма — имеет значение.
При этом, для разработки на Qt, она имеет популярность.
Это совсем не исключает применение других парадигм, например smart-pointers.
В правильном применении — используем каждую парадигму в своём месте.

Вот толковое (считай экспертное) мнение:

https://www.cleanqt.io/blog/crash-course-in-qt-for-c%2B%2B-developers,-part-4
Отредактировано 05.10.2023 0:24 AlexGin . Предыдущая версия .
Re[6]: Про указатели в Qt - нравится ли вам?
От: so5team https://stiffstream.com
Дата: 05.10.23 04:46
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>а QT всего лишь незначительный коммерческий продукт — один из многих.


Это Qt незначительный продукт?

Когда кажется, что Shmj достиг уже самого дна, он начинает усиленно копать.
Re[4]: Про указатели в Qt - нравится ли вам?
От: night beast СССР  
Дата: 05.10.23 06:45
Оценка: +1
Здравствуйте, AlexGin, Вы писали:

SaZ>>Второй случай — вы создали объект на стеке, поместили в лэйаут, и тут же удалили при выходе из скоупа (функции). Тоже всё корректно.

AG>Какой смысл действий в этом случае?
AG>Мёртвый указатель в лейоуте...

уберется при вызове деструктора l
Re[5]: Про указатели в Qt - нравится ли вам?
От: AlexGin Беларусь  
Дата: 05.10.23 07:15
Оценка: +1 -1
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, AlexGin, Вы писали:


SaZ>>>Второй случай — вы создали объект на стеке, поместили в лэйаут, и тут же удалили при выходе из скоупа (функции). Тоже всё корректно.

AG>>Какой смысл действий в этом случае?
AG>>Мёртвый указатель в лейоуте...

NB>уберется при вызове деструктора l

Да, но время жизни этого объекта l ограничено функцией: addLabelToLayout — после выхода из этой функции: объект разрушен; указатель адресует мусор
Re[6]: Про указатели в Qt - нравится ли вам?
От: Alekzander  
Дата: 05.10.23 07:18
Оценка:
Здравствуйте, Shmj, Вы писали:

A>>Потому, что стандартная библиотека — говно.


S>А обоснование? Ведь ее делают лучшие умы мира можно сказать, а QT всего лишь незначительный коммерческий продукт — один из многих.


Ну вот видишь — ты судишь по авторитетам. Если что-то сделали всемирно известные... умы, значит это что-то хорошее. А я наоборот: смотрю на результат. Если результат говно, значит те, кто его сделал — сам понимаешь кто.

Там же выше есть примеры, в т.ч. QString. Посмотри на него. Через него ты можешь сделать со строкой всё, что тебе надо. Как, собственно, во всех удобных стандартных библиотеках. На этом фоне каким надо быть архитектурным астронавтом, чтобы включать в стандартную библиотеку класс, который нужен ТОЛЬКО для стандартизации.
Re[6]: Про указатели в Qt - нравится ли вам?
От: night beast СССР  
Дата: 05.10.23 07:30
Оценка:
Здравствуйте, AlexGin, Вы писали:

NB>>уберется при вызове деструктора l

AG>Да, но время жизни этого объекта l ограничено функцией: addLabelToLayout — после выхода из этой функции: объект разрушен; указатель адресует мусор

сейчас нет возможности проверить, но по всей логике, после выхода из функции в layout не будет указателя на этот объект.
Re[7]: Про указатели в Qt - нравится ли вам?
От: so5team https://stiffstream.com
Дата: 05.10.23 07:31
Оценка: +1
Здравствуйте, Alekzander, Вы писали:

A>Там же выше есть примеры, в т.ч. QString. Посмотри на него. Через него ты можешь сделать со строкой всё, что тебе надо. Как, собственно, во всех удобных стандартных библиотеках. На этом фоне каким надо быть архитектурным астронавтом, чтобы включать в стандартную библиотеку класс, который нужен ТОЛЬКО для стандартизации.


Если вы проведете опрос среди большого количества C++ разработчиков о том, хотят ли они видеть в стандартной библиотеке C++ один большой класс для работы со строками по типу QString, то вы удивитесь тому, насколько много скажет "нет".
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.