2
我有以下代碼(它的一部分是爲簡化起見,省略)延遲初始化
頭:
class DbgModuleMarker
{
public:
DbgModuleMarker(std::string name);
static std::ostream createStream(const DbgModuleMarker& marker);
std::ostream& operator()() const;
};
extern DbgModuleMarker PHYSICS;
源:
std::ostream& DbgModuleMarker::operator()() const
{
static std::ostream os = createStream(*this);
return os;
}
此代碼的目標是允許operator()
使用如下
debug_modules::PHYSICS() << "Foo" << endl;
我真的不知道如何以這種方式調用函數時靜態行爲。
我期望的功能createStream
只會被調用一次(或不會被調用,如果operator()
不會被調用
我想知道如果我期待的行爲是會發生什麼,如果這是一個可能的想法或者我做得非常不對沒有注意到它。
什麼是對線程安全和異常安全的影響?
(考慮創建本身將是線程安全的,因爲流性病的線程安全:: ostream在這裏不是我關心的)