Идея примерно такая. Есть некоторый класс A в котором есть некоторая струтура данных, допустим мапа. Класс имеет публичные методы работы с этой мапой. Но нам допустим надо запустить фоновый поток который будет в бесконечном цикле проверять, ну допустим насколько запись в мапе стара и удалять ее если надо. Тред должен завершиться вместе с уничтожением класса без ругани и эксепшенов.
Придмал такое решение. Подскажите, если тут подводные камни, или оно нормальное? Естественно, потом туда надо добавить еще мьютексы. Но меня сейчас больше интересует создание и управление этим фоновым тредом
#include <thread>
#include <memory>
#include <map>
#include <iostream>
typedef std::map<std::string,std::string> MyMap;
class A
{
private:
class Thread
{
private:
bool flag;
MyMap& my_map_inst;
std::thread thr;
public:
void funct()
{
while (flag) {
std::cout << "ooo" << std::endl;
}
std::cout << "fin" << std::endl;
}
Thread(MyMap& m) : flag(true), my_map_inst(m), thr(std::bind(&Thread::funct,this))
{
}
void final()
{
flag = false;
thr.join();
}
};
MyMap my_map_inst;
Thread thread_i;
public:
A() : thread_i(my_map_inst)
{
}
~A()
{
thread_i.final();
}
};
int main()
{
{
A a;
}
std::cout << "111" << std::endl;
int i;
std::cin >> i;
return 0;
}
По идее проблем быть не должно. Стандарт вроде гарантирует создание мапы до создания объекта треда и инициализацию контрольного флага (flag) до запуска треда. Может тут есть еще какие подводные камни?