Russian Qt Forum
Ноябрь 24, 2024, 01:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: грамотное деструктирование :)  (Прочитано 2602 раз)
call_me_frank
Гость
« : Июнь 04, 2014, 12:38 »

работаю с почтовыми протоколами через сокеты.

есть класс почтового ящика и два класса протоколов (содержащих сокеты), которые работают каждый в своем потоке.

потоки, как и объекты протоколов создаются в конструкторе ящика, и после этого протоколы кидаются в потоки через moveToThread.

в двух словах:

Код:
MB::MB () { 

    imap = new Imap(email, pwd);
    ith = new QThread(this);
    imap->moveToThread(ith);
    ith->start();

}

проблемы возникают при уничтожении объекта почтового ящика. программа вылетает - в 3 случаях из десяти, но это недопустимо. много вариантов перепробовано, но 100% надежный так и не найден.

деструктор ящика:
Код:
MB::~MB(){
    //

    qDebug() << "~MBX";

    sth->quit();
    sth->wait();

    ith->quit();
    ith->wait();

    delete smtp;
    delete imap;
}

деструктор протокола:
Код:
Imap::~Imap() {
    //

    qDebug() << "~IMAP";

    socket->close();
    socket->deleteLater();

    this->deleteLater();
}

ящик удаляется через delete mb;

вопрос, как все-таки составить деструктор ящика, протокола, как правильно закрывать и удалять сокет и как удалять сам ящик, чтобы вся эта связка работала как часы и не заставляла пользователей нервничать, становясь причиной аварийного завершения программы?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Июнь 04, 2014, 13:39 »

this->deleteLater(); - явно лишнее, ты уже в деструкторе, а  значит уже удаляется объект.

socket->deleteLater(); - если сокет создан в конструкторе этого объекта, то яно его и удаляй.
Записан

Юра.
call_me_frank
Гость
« Ответ #2 : Июнь 04, 2014, 17:10 »

спасибо! буду тестить и учиться )
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.059 секунд. Запросов: 23.