Как освободить кучу памяти потока локального хранилища

У меня есть структура, используемая для локального хранения потока, как это:

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 один раз, и, наконец, присоединиться, когда они сделали со всей своей работой.

Вопрос в том, кто будет очищать память тем? и как?
Спасибо

0

Решение

Нет причин звонить clearCache(),

Как только поток выходит или thread_specific_ptr выходит из области видимости, будет вызвана функция очистки. Если вы не передаете функцию очистки в thread_specific_ptrконструктор, он будет просто использовать delete,

1

Другие решения


По вопросам рекламы [email protected]