Задать вопрос
@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");

}
}
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Простой 5 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@reishi
Перед разрушением объекта std::thread необходимо вызвать у объекта потока join или detach, иначе кидается std::terminate ( то, что вы называете критической ошибкой )

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

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

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