2012-09-08 60 views
0

我寫了一個非常簡單簡單的日誌類遊戲即時消息只寫在終端中查看一些信息。但是我這樣做的方式讓我感到困惑,因爲我覺得它效率太低。每次我記錄它的構造函數和析構函數都會被調用。因此,如果我想打印當前幀速率(例如60fps),則cont/desct被稱爲每秒60次(每秒創建並銷燬60個日誌對象)。我不想在每次我想記錄某些東西時都在遊戲中傳遞一個日誌對象,我不想使用signletons。有沒有更好的解決方案。C++日誌類效率低下?

#include <iostream> 
#include <sstream> 


class Log 
{ 
public: 
    Log() : os() 
    { 

    } 

    ~Log() 
    { 
     fprintf(stderr, "%s\n", os.str().c_str()); 
    } 

    std::ostringstream &Write() 
    { 
     os << "from log class: " << 1337 << "\t"; 

     return os; 
    } 

private: 
    std::ostringstream os; 
}; 

int main(int argc, char *argv[]) 
{ 
    Log().Write() << "Hello world " << 45; 

    return 0; 
} 
+0

你知道靜態類嗎? –

+2

@AndreasHenning在C++中沒有靜態類。 –

+0

但有靜態方法。 –

回答

0

你正在一個假設,即構造函數和析構函數是低效的。根據我的經驗,如果它們是在頭文件中聲明的(如同你的),並且它們很簡單(就像你的那樣),那麼你可以相信編譯器將它們內聯並做得很好。對printf的調用將佔據主導地位。

+0

是的,但您仍然不能忽視分配內存的時間以及創建實例時運行時在背後執行的操作,特別是在您可以輕鬆避免的時候。 –