B2007中 codeguard 對仿函數的支持可能有問題
std::vector<MyClass> V ;
int a ;
class FunctionalOP
{bool operator() (MyClass const &A , int a) {return A.ID < a; }};
一般我們這樣用仿函數,以得到比普通函數更快的編譯結果:
std::lower_bound(V.begin(),V.end(),a,FunctionalOP());
可是在一個項目中(多BPL共用),當打開codeguard時,會導致程序退出時產生異常,無法正常關閉。
經測試問題出在這行語句上:std::lower_bound(V.begin(),V.end(),a,FunctionalOP());
想不通錯在哪,改成:
FunctionalOP F ;
std::lower_bound(V.begin(),V.end(),a,F);
該模塊居然沒異常了,於是將項目中所有用到仿函數的地方都改成類似模式,重新編譯運行,果然,BUG沒了。
注:不打開 codeguard 沒異常,只是 codeguard 確實可以幫我們找到很多 BUG .
我專門在一個 exe 中測試這問題,卻發現在單獨的exe 中居然沒出現這BUG,好好的。只好將這情況記錄下來,供參考。
哪個清楚 codeguard 設定的,請告訴我,codeguard有無專門的設定對付仿函數的。
[解决办法]
学习来了。
[解决办法]
帮顶,我也有codeguard方面的问题,期待大牛!