У меня есть структура, используемая для локального хранения потока, как это:
namespace {
typedef boost::unordered_map< std::string, std::vector<xxx> > YYY;
boost::thread_specific_ptr<YYY> cache;
void initCache() {
//The first time called by the current thread.
if (!cache.get()){
cache.reset(new YYY());
}
}
void clearCache() {
if (cache.get()){
cache.reset();
}
}
}
И класс, объект которого мог быть создан main thread
:
class A {
public:
void f() {
initCache();
//and for example:
insertIntoCache();
}
~A(){
clearCache();// <-- Does/Can this do anything good ??
}
}
Несколько потоков могут получить доступ к объекту (ам) A
хранится, например, в глобальном контейнере. Каждую из этих тем нужно вызвать A::f()
время от времени. Таким образом, они создают свою собственную копию cache
на heap
один раз, и, наконец, присоединиться, когда они сделали со всей своей работой.
Вопрос в том, кто будет очищать память тем? и как?
Спасибо
Нет причин звонить clearCache()
,
Как только поток выходит или thread_specific_ptr
выходит из области видимости, будет вызвана функция очистки. Если вы не передаете функцию очистки в thread_specific_ptr
конструктор, он будет просто использовать delete
,