試圖解決一個MEM泄漏我已經改變了這一點:斷言試圖刪除一個空對象
void addListener(IListener* listener, const std::string& appender)
{
std::pair<t_ListenerVectorMap::iterator,bool> p =
listenerVectorMap.insert(std::string(appender), new t_ListenerVector);
p.first->second->push_back(listener);
//add the appender
addAppender(appender);
}
通過這樣的:
void addListener(IListener* listener,const std::string& appender)
{
t_ListenerVector* lv = new t_ListenerVector;
std::pair<t_ListenerVectorMap::iterator,bool> p =
listenerVectorMap.insert(std::string(appender), lv);
p.first->second->push_back(listener);
if (!p.second)
{
delete lv;
}
addAppender(appender);
}
我試圖讓乘坐泄漏是新的t_ListenerVector(是一個boost :: ptr_vector)。當appender已經存在於listenerVectorMap中時,插入操作不會修改map的內容,所以新的t_ListenerVector不會被插入,並且會變成mem漏洞。
變化是爲了避免這種泄漏。如果沒有新插入,lv沒有插入,所以我刪除它。但問題是,刪除lv會拋出一個斷言(在vc \ include \ vector Line:70中)。 如果lv沒有改變,爲什麼會出現這個錯誤?
有些想法值得歡迎。 謝謝
你不能「拋出一個說法」。你可以拋出異常,或者斷言失敗。究竟發生了什麼,錯誤是什麼?什麼是定義't_ListenerVector'? –
'lv'不應該失敗,因爲'lv'是指向'new'的指針。 –
使用智能指針'unique_ptr'或'shared_ptr',它既能消除泄漏,又能使代碼異常安全。 –