Это исправленный способ использования 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-> () и, следовательно, вызывать нарушение прав доступа? когда я удаляю p, что будет с _p?

0

Решение

Если myStruct это QObject подкласс, то ваш код должен работать, столько, сколько можно сказать из показанных фрагментов. QObject деструктор очистит каждый QPointer указывая на разрушенный экземпляр. Если это не QObject подкласс, то вы должны получить ошибку компиляции / ссылки.

Цитата из документы:

Обратите внимание, что класс T должен наследовать QObject или ошибку компиляции или ссылки
приведет к.

2

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


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