Только простые указатели, используемые в Qt API

Я работал с Qt несколько дней, и мне интересно, почему все их API используют простые указатели вместо их собственных умных указателей, таких как QSharedPointer,

Не будет ли более последовательным их использование?

2 ответа

Решение

QSharedPointer реализуется начиная с Qt 4.5. В Qt QObjectS организуются в деревьях объектов. Когда вы создаете QObjectс другим объектом в качестве родителя первый добавляется в список детей последнего и уничтожается в деструкторе последнего. Так что вам не нужно использовать QSharedPointer с его накладными расходами.

Почему должен QSharedPointer использоваться, когда в API Qt владение объектом обычно является эксклюзивным для одного объекта? Там нет необходимости для обмена.

Более уместным будет вопрос, почему Qt использует необработанные указатели вместо умных указателей (будь то Qt или C++11), и причина этого проста - это новые функции, и хотя Qt 5 был выпущен после C++11 (и внутренне использует его), переписывание всего, чтобы использовать умные указатели, кроме утомительного, также приведет к аннулированию обратной сопоставимости пользовательского кода.

В целом, API Qt, похоже, в некоторой степени отсутствуют и не согласованы в этом отношении. Например - это большое неудобство, что умные указатели Qt не поддерживаются в QtQuick, который использует свою собственную реализацию закрытых умных указателей, поэтому вы должны владеть либо правами, управляемыми механизмом QML, либо C++, но вы не можете на самом деле делиться между ними.,

Другие вопросы по тегам