1樓:陳碩
1. static __thread Deleter 編譯就不過。
2. muduo/base/tests/http://ThreadLocalSingleton_test.cc驗證了目前的實現是正確的,用 valgrind 檢查沒有記憶體洩漏。
3. 是只有乙個 deleter,有什麼問題?
2樓:老鼠的海邊
類不長,我就全貼了。。。deleter析構時呼叫destructor,那麼應該是每個ThreadLocalSingleton物件都有自己的deleter_才對啊,使用static後,所有ThreadLocalSingleton物件共用乙個deleter_,這不科學。。。
namespace muduo
template
class ThreadLocalSingleton : boost::noncopyable//
public:
static T& instance()//返回物件
if (!t_value_)
t_value_ = new T();
deleter_.set(t_value_);
return *t_value_;
static T* pointer()//返回指標
return t_value_;
private:
ThreadLocalSingleton();
~ThreadLocalSingleton();
static void destructor(void* obj)//
assert(obj == t_value_);
typedef char T_must_be_complete_type[sizeof(T) == 0 ? -1 : 1];//T是有效的型別
T_must_be_complete_type dummy; (void) dummy;
delete t_value_;
t_value_ = 0;
class Deleter
public:
Deleter()
pthread_key_create(&pkey_, &ThreadLocalSingleton::destructor);
~Deleter()
pthread_key_delete(pkey_);
void set(T* newObj)
assert(pthread_getspecific(pkey_) == NULL);
pthread_setspecific(pkey_, newObj);
pthread_key_t pkey_;
static __thread T* t_value_;
static Deleter deleter_;//
template
__thread T* ThreadLocalSingleton::t_value_ = 0;
template
typename ThreadLocalSingleton::Deleter ThreadLocalSingleton::deleter_;
如果乙個人遇到乙個用科學無法解釋的問題他會怎麼辦呢?
清虛不塵 如果我是這個人,我不會說出我遇到的這個問題。因為我知道即便我說出這個問題,某些大佬也會以一百種科學來解釋,且不管是否解釋得通。只要題主量身為你定做題目,你就一定就機會出來胡扯 王時舟 如果是很重要的認知,就耐心繼續等待,如果不是那麼重要,只能暫時放棄。科學的解釋需要時間去鑽研,需要一代一代...
大學裡沒有遇到乙個知心的朋友是自己的問題嗎
說就說正事 自己剛剛回答的,搬到這裡 其實,個人感覺,知心或許並不代表有相同的話題,有相同的愛好,而且在於這個人我願意與他分享,我願意跟他說,就算他根本沒聽說過的事,不會因為他不懂而覺得不和我一路,而是我特別迫切的想分享給他,他對我也一樣。沒有什麼一定會發生,一切順其自然就好,做好自己,你會遇到那個...
遇到乙個問題,請各位給講解一下SQLAlchemy中的backref?
JIMMM 不知道理解得對不對 A類裡面有個屬性b,還有乙個C類 b db.relationship C A通過b訪問C 定義了backref後 b db.realtionship C backref db.backref d A可以通過b訪問C,並且C可以通過d訪問A 關於 relationshi...