這裏是C++的新手。以下可能導致內存泄漏?分配給解除引用的字符串 - 可以導致內存泄漏嗎?
// debug is optional, for debugging purposes.
// Say my_string is an internal string class my company uses.
int DoSomething(my_string *debug) {
const my_string& s = GetString();
if (debug != nullptr) *debug = s; // Could this cause a memory leak?
return DoSomethingElse(s);
}
我想在這裏查看我的理解:我覺得在註釋行的內存區域指向debug
只會被覆蓋有(副本)的s
內容,除非有禁止複製構造函數實現my_string
,在這種情況下,它也可能做一些其他的東西。
如果沒有特殊的拷貝構造函數my_string
,那麼如果my_string
指向其內部表示任何動態分配的內存(它有可能不會,因爲它可以容納任何長度的字符串),那麼上面的代碼會導致內存泄漏。
另外,關於預期C++「禮儀」的另一個問題,我猜 - 我應該能夠假設編寫my_string
的人寫了一個複製構造函數以避免類似情況下的內存泄漏?也就是說,因爲我自己的代碼中沒有任何new
,如果這段代碼導致內存泄漏,說這不是我的「錯誤」是否合理?
編輯:我想也許我的意思是複製賦值運算符而不是複製構造函數。
'my_string'最好有一組單元測試來驗證它*不*泄漏,而且是一個可惡的使用它的原因,而不是'std :: string'。當然這可能會泄漏'my_string'。最後,如果你知道**它吸收並使用它,那麼是的,可以說人們可以得出結論,它仍然是你的錯。 – WhozCraig
也許是的,也許沒有。這取決於這裏沒有顯示的代碼。 – juanchopanza
@WhozCraig @juanchopanza它僅僅依賴於'my_string'的實現還是依賴於'GetString'和'DoSomethingElse'? – John