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