2014-09-02 3 views
0

В настоящее время я работаю над интерфейсом для случайного приложения. В интерфейсе есть QListView, который имеет три связанные с ним кнопки. Первая добавляет, добавляет новый элемент в виджет, эта кнопка отлично работает. Проблема связана с кнопкой очистки:Ошибка при использовании Qt и уникальных указателей

void NeuralNetwork::on_clearButton_clicked() { 
    this->model.get()->clear(); 
    this->item.clear(); 
} 

как вы видите, как модель, так и элемент являются атрибутами этого класса. Они объявлены как это:

std::unique_ptr<QStandardItemModel> model = unique_ptr<QStandardItemModel>(new QStandardItemModel()); 
vector<unique_ptr<QStandardItem>> item; 

Изначально я использовал обычные указатели, но, как я искал в Интернете, люди рекомендовали, используя уникальные указатели для обработки управления памятью.

Я думаю, что есть что-то не так с

this->model.get() 

, но я не знаю точно, так как у меня нет опыта работы с смарт-указатели. Обратите внимание, что программа не получает ошибок построения, она работает нормально, пока я не нажму кнопку очистки на интерфейсе, затем программа выйдет из строя:

Программа неожиданно завершена.

+0

Что вы используете 'this-> model.get()' for? –

+0

2. Вы помещаете 'QStandardItemModel' в форму и устанавливаете ее родитель? –

+0

как я понимаю, model.get() возвращает мне указатель на объект, поэтому я могу использовать его методы. Но теперь я думаю, что я сброшу умные указатели и вместо этого буду использовать обычные указатели, поскольку Вернер Эразм сказал, что он избыточен. – lhahn

ответ

2

Будьте осторожны, так как QStandardItemModel имеет право собственности на стандартные элементы. Поэтому вы получите двойное удаление, если ассоциируете стандартный элемент с уникальным указателем.

В целом, с Qt вам не нужно использовать уникальные указатели, поскольку родители уже имеют право собственности на своих детей.

+0

Хорошо. Я запомню это. Теперь я просто использую обычные указатели, и он работает нормально, я просто боялся иметь проблемы с памятью в будущем. – lhahn

Смежные вопросы