昨天做一個dll,代碼很快寫完了,然而使用得時候總是遇到string內部指針刪除錯誤,郁悶了一天,今天沒去公司,好好研究了一下。
首先看下下面這段代碼,聲明兩個string對象:


調試狀態下可以看到內部指針:
s1=0x00364ff9
s2=0x00365061
然后執行

按下f11,進入xstring源文件:




繼續進入assign(_X)函數:






























這樣結果就是調用=號以后,s2地址和s1地址一樣,都是0x00364ff9。
假如我們動態庫有這樣一個類class DLL接口:







在客戶調用時候:



解決方法就是避免std::string引用計數,接口處修改為SetString(const char*),這樣在dll內部分配內存,內部釋放,就不會有問題。