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

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

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

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

4

Решение

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

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


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

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

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

1

Другие решения


По вопросам рекламы [email protected]