Если я создаю подкласс неявно общего класса Qt (например, QList), будет ли мой подкласс также неявно предоставлен в общий доступ?
Я прочитал краткое введение в неявное разделение находится в документации QtCore5.3, но я не видел упоминаний о наследуемости.
Моя цель состоит в том, чтобы попытаться написать более эффективный код при принятии решения, какие аргументы передавать и как их передавать.
Как сказано в комментариях, классы Qt используют неявный обмен обычно являются контейнерами данных или инструментами и не предназначены для использования в подклассах.
Вы можете заметить, что, поскольку нет виртуального деструктора, фактически вообще нет виртуальной функции.
Из-за рисков и плохой практики вы, вероятно, захотите создать другой дизайн без наследования.
Чтобы ответить на ваш вопрос:
Как неявный обмен работает ?
Экземпляры класса совместно используют данные и явно сообщают, когда им нужно изменить эти данные (и, следовательно, глубоко копировать их), вызвав detach()
функция.
Таким образом, данные материнского класса все еще будут указателем общих данных, а методы материнского класса все равно будут отключаться в соответствующее время. Но ваши члены данных подкласса будет не быть неявно разделяемым, и ваши методы подкласса будут не неявно отсоединять, когда это может быть необходимо.
Вы также можете перегружать методы и забыть отключить их, чтобы испортить общие данные.
Ты сделаешь не Преимущество неявного обмена, вы должны явно установить его снова для ваших собственных данных.
Вам нужно будет инкапсулировать данные в контейнере общих данных и управлять detach
в ваших методах. Проверьте документ:
http://doc.qt.io/qt-5/qshareddatapointer.html#details