Как передать указатель на объект класса между потоками и сохранить его после завершения основного потока? - PullRequest
1 голос
/ 19 апреля 2011

Вот проблема, с которой я столкнулся:

Основной поток создает объекты класса (mybaseclass * local = new childclass;), которые по сути являются командами, которые знают, что они должны делать. Затем он передает указатель на объект класса разветвленному потоку через сокет, а затем основной поток завершает работу с объектом и возвращает ожидание какого-то другого ввода. Разветвленный поток затем читает указатель из очереди, но объект класса, на который указывал указатель, уже был автоматически удален по завершении основного потока. Как заставить объект класса сохраняться после выполнения основного потока?

Спасибо! Джефф

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

В основной теме создайте свой объект в бесплатном магазине, используя new:

mybaseclass* local = new childclass;

... будучи уверенным, что не используйте интеллектуальный указатель, так какумный указатель уничтожит объект, когда он выйдет из области видимости.Передайте указатель на ваш рабочий поток с помощью любых средств, которые вы используете, а затем, когда ваш рабочий поток закончил, удалите его:

mybaseclass* thread_local = SomehowGetTheObject();
// MAGIC HAPPENS...
delete thread_local;

Кроме того, если вы передаете базовые указатели производным классам,уверен, что у вашего базового класса есть деструктор virtual.

2 голосов
/ 19 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...