Тем не менее, класс QSharedDataPointer
есть это.
Я всегда должен определить Class::pointer
typedef
для краткости и создать указатель с Class::pointer(new Class)
,
Кто-нибудь знает причину этого?
Я подозреваю, что причина, по которой оператор T * () не существует, заключается в том, что Функция T * data () которые, как и многие другие классы Qt, такие как QString, QByteArray и т. д., предоставляют функцию data () для доступа к базовым данным класса Qt.
Это поддерживает стандартный интерфейс для всех классов Qt.
Кроме того, перегружая оператора, очень легко совершить ошибку, если кто-то изменит базовые данные и не осознает их здесь. Использование функции data (), на мой взгляд, немного более очевидно, что вы делаете.
данные() Функция для QSharedPointer также предупреждает, чтобы не удалять возвращенный указатель или передавать его чему-либо, что могло бы его удалить, поэтому я рассматриваю его как функцию, которая есть, если она вам действительно нужна, но лучше, если вы можете ее избежать и если вы используете это, подумайте о том, что происходит.
Что касается QSharedDataPointer, в соответствии с документация, звонит оператор здесь звонит отсоединить (), делая это безопасно звонить.