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