Это исправленный способ использования QPointer?
Как я могу проверить, удаляется ли содержимое указателя? Если я использую QPointer, как это:
myClass::myClass(myStruct* p){
_p = p;//_p is a QPointer<myStruct>
}
myClass::function(){
if(_p) {_p->function();}
}
тогда у меня есть
myStruct* p = new myStruct();
myClass A(p);
delete p;
A.function();
будет ли вызываться последняя функция A.function() из-за _p->function() и, следовательно, вызывать нарушение прав доступа? когда я удаляю p, что будет с _p?
1 ответ
Решение
Если myStruct
это QObject
подкласс, то ваш код должен работать, столько, сколько можно сказать из показанных фрагментов. QObject
деструктор очистит каждый QPointer
указывая на разрушенный экземпляр. Если это не QObject
подкласс, то вы должны получить ошибку компиляции / ссылки.
Цитата из документов:
Обратите внимание, что класс T должен наследовать QObject, иначе это приведет к ошибке компиляции или ссылки.