static myclass* myclass::instance()
static myclass*myclass::instance()mutex.unlock();
}return
inst.data();
}
既保證了執行緒安全又防止了記憶體洩漏,效率也沒降低太多,簡直完美。
可惜每次都要重複這麼幾行實在麻煩,於是寫了乙個
templateclass
singleton
mutex.unlock();
}return
inst.data();
}};
使用的時候直接這樣:
myclass* inst = singleton::instance();
#define declare_singleton(class) \q_disable_copy(class) \public
: \
static class*instance() \
\return
inst.data(); \
}
classmyclass
當然,為了要保證真的是單例模式,還要把建構函式限制為private,不然以後什麼時候忘記了這碼事,在外面又new了一下就不好了。另外qt本身自帶了乙個巨集
q_global_static
,也有類似單例模式的效果,qthreadpool::globalinstance()
函式的實現就是利用了這個巨集。不過它的主要用處是宣告全域性變數,和singleton還是有差別的。
Qt自定義事件的實現
後來我就想,那qt的發明人是怎麼定義事件的呢?其實站在qt發明人的角度,qevent就是他們的 自定義事件 ok!這就好辦了!看看qt發明人怎麼定義的qevent,看看他們怎麼用自己定義的qevent,不就回答了文章開頭的倆問題了嘛!o o 我把整個過程總結為 長官定義事件 信使傳遞事件 軍隊接收並...
Qt 自定義事件的實現
後來我就想,那qt的發明人是怎麼定義事件的呢?其實站在qt發明人的角度,qevent就是他們的 自定義事件 ok!這就好辦了!看看qt發明人怎麼定義的qevent,看看他們怎麼用自己定義的qevent,不就回答了文章開頭的倆問題了嘛!o o 我把整個過程總結為 長官定義事件 信使傳遞事件 軍隊接收並...
C 單例類實現巨集定義
專案中單例類很多的話,每個都要宣告 回比較累贅,所以寫了乙個巨集定義簡介使用 巨集定義如下 define declare sington classname private classname classname classname const classname classname operato...