Почему в классе QSharedPointer нет перегруженного оператора T * ()

Тем не менее, класс QSharedDataPointer есть это.

Я всегда должен определить Class::pointertypedef для краткости и создать указатель с Class::pointer(new Class),

Кто-нибудь знает причину этого?

1 ответ

Я подозреваю, что причина, по которой оператор T* () не существует, заключается в том, что есть функция T* data(), которая, как и многие другие классы Qt, такие как QString, QByteArray и т. Д., Предоставляет функцию data () для доступа к базовые данные класса Qt.

Это поддерживает стандартный интерфейс для всех классов Qt.

Кроме того, перегружая оператора, очень легко ошибиться, если кто-то изменит базовые данные и не осознает их здесь. Использование функции data (), на мой взгляд, немного более очевидно, что вы делаете.

Функция data () для QSharedPointer также предупреждает, чтобы не удалять возвращенный указатель или передавать его чему-либо, что могло бы его удалить, поэтому я вижу его как функцию, которая есть, если она вам действительно нужна, но лучше, если вы можете избежать этого и если вы используете его, подумайте о том, что происходит.

Что касается QSharedDataPointer, согласно документации, вызов оператора здесь вызывает detach (), что делает его безопасным для вызова.

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