Microsoft運行時庫提供調試版本的分配函數。對於C++中,這是新的與簽名操作者的調試變體:使用調試版本覆蓋新版本而不損壞位置新增
void *operator new(size_t size, int blockType, const char *filename, int linenumber);
和宏的定義如下
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
我們儀器所有的分配,一個通常定義
#if defined DEBUG_NEW
#define new DEBUG_NEW
#endif
然而,這個定義打破了使用放置新的任何地方,因爲這兩組參數最終成爲語法錯誤。現在,我可以輕鬆處理我們代碼中的少數用途,但標準庫和增強功能使用全新的位置。因此,定義全局意味着在定義之前包含許多內容,並且會減慢編譯速度。
那麼有沒有什麼辦法可以在我們的代碼中分配代碼,而不必因爲它們包含新的位置並且不必將所有文件中的最後一個定義放在所有文件中,或者手動編寫DEBUG_NEW而無需拉入頭文件?
在我們的情況下,預編譯頭文件將非常難以維護。由於各種可移植性問題,它們將非常龐大而複雜(代碼庫針對4種不同的平臺編譯)。 –
他們難以維護的方式是什麼? pch應該很少改變。 –
如果它包含了提升內容,它會經常改變。但也許我應該嘗試預編譯這個內存調試頭(用'/ Fi'編譯器選項注入);新的位置出現在相當少的地方。 –