@daniil14056

Как избежать утечки памяти у класса с полем указателем на свой поток?

В классе запускается метод в отдельном потоке, который должен позаботится о освобождении ресурсов, но не могу указатель на сам поток освободить
Класс выглядет так
class Listener{
  private :
   std::thread th;  // указатель на поток, не могу  его удалить с кучи
  char *str;         // удалятся
public:
Listener(char *_str,int len){
       str=new char[len];
          strncpy(str,_str,len);
        th=new std::thread(run,this); // запускаю выполнение
}
    static void run(Listener *_this){
         /* body
        */
          delete  [] _this->str;    //  удаляю строку
          // delete _this->th;  // ОШИБКА критическая, если  добавить
         delete _this;                   // вызываю деконструктор и удаляю this : Listner
}
};
void main(){ 
  for(;;){
     Listener *l=new Listener("12345678912345");

}
}
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 1
@reishi
Перед разрушением объекта std::thread необходимо вызвать у объекта потока join или detach, иначе кидается std::terminate ( то, что вы называете критической ошибкой )

Советую прочитать книгу Параллельное программирование на С++ в действии. П....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы