Название: грамотное деструктирование :) Отправлено: call_me_frank от Июнь 04, 2014, 12:38 работаю с почтовыми протоколами через сокеты.
есть класс почтового ящика и два класса протоколов (содержащих сокеты), которые работают каждый в своем потоке. потоки, как и объекты протоколов создаются в конструкторе ящика, и после этого протоколы кидаются в потоки через moveToThread. в двух словах: Код: MB::MB () { проблемы возникают при уничтожении объекта почтового ящика. программа вылетает - в 3 случаях из десяти, но это недопустимо. много вариантов перепробовано, но 100% надежный так и не найден. деструктор ящика: Код: MB::~MB(){ деструктор протокола: Код: Imap::~Imap() { ящик удаляется через delete mb; вопрос, как все-таки составить деструктор ящика, протокола, как правильно закрывать и удалять сокет и как удалять сам ящик, чтобы вся эта связка работала как часы и не заставляла пользователей нервничать, становясь причиной аварийного завершения программы? Название: Re: грамотное деструктирование :) Отправлено: lit-uriy от Июнь 04, 2014, 13:39 this->deleteLater(); - явно лишнее, ты уже в деструкторе, а значит уже удаляется объект.
socket->deleteLater(); - если сокет создан в конструкторе этого объекта, то яно его и удаляй. Название: Re: грамотное деструктирование :) Отправлено: call_me_frank от Июнь 04, 2014, 17:10 спасибо! буду тестить и учиться )
|