我有一个用于线程本地存储的结构,如下所示:
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 :(得分:1)
没有理由拨打clearCache()
。
一旦线程退出或thread_specific_ptr
超出范围,将调用清理函数。如果您没有将清理功能传递给thread_specific_ptr
的构造函数,则只会使用delete
。