Является ли "неявное разделение" наследуемым от классов Qt?

Если я создаю подкласс неявно общего класса Qt (например, QList), будет ли мой подкласс также неявно использоваться совместно?

Я прочитал краткое введение в неявное совместное использование, находящееся в документации QtCore5.3, но я не увидел упоминаний о наследуемости.

Моя цель состоит в том, чтобы попытаться написать более эффективный код при принятии решения, какие аргументы передавать и как их передавать.

1 ответ

Решение

Как сказано в комментариях, классы Qt, использующие неявное совместное использование, обычно являются контейнерами данных или инструментами и не предназначены для подкласса.
Вы можете заметить, что из-за отсутствия виртуального деструктора, фактически нет виртуальной функции вообще.

Из-за рисков и плохой практики вы, вероятно, захотите создать другой дизайн без наследования.


Чтобы ответить на ваш вопрос:

Как работает неявный обмен?
Экземпляры класса совместно используют данные и явно сообщают, когда им нужно изменить эти данные (и, следовательно, глубоко копировать их), вызвав detach() функция.
Таким образом, данные материнского класса все еще будут указателем общих данных, а методы материнского класса будут отключаться в соответствующее время. Но ваши члены данных подкласса не будут неявно разделены, и ваши методы подкласса не будут неявно отключаться, когда это может понадобиться.
Вы также можете перегружать методы и забыть отключить их, чтобы испортить общие данные.

Вы не получаете выгоды от неявного обмена, вы должны явно установить его снова для ваших собственных данных.
Вам нужно будет инкапсулировать данные в контейнере с общими данными и управлять detach в ваших методах. Проверьте документ:
http://doc.qt.io/qt-5/qshareddatapointer.html

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