我是一名Java程序員,我是C++新手,最近我正在編寫一些C++代碼。 (在Java中有GC,我不必擔心這個問題)在函數內部定義的C++對象的生命週期
這是我的問題。 假設我有一個函數f()
char *f() {
string a = "Hello";
return a.c_str();
}
將這段代碼是有效的,我的困惑是什麼是f內聲明的字符串的生命週期,這將是GC-ED當f回報?我能否依靠返回的a.c_str()在f外部正確?
我是一名Java程序員,我是C++新手,最近我正在編寫一些C++代碼。 (在Java中有GC,我不必擔心這個問題)在函數內部定義的C++對象的生命週期
這是我的問題。 假設我有一個函數f()
char *f() {
string a = "Hello";
return a.c_str();
}
將這段代碼是有效的,我的困惑是什麼是f內聲明的字符串的生命週期,這將是GC-ED當f回報?我能否依靠返回的a.c_str()在f外部正確?
C++還沒有像java這樣的垃圾收集器。如果你創建一個對象,那麼你需要自己銷燬它。在函數中定義的所有變量在從此函數退出時將被銷燬(除了需要自己銷燬的對象)
*「除了需要自己摧毀的物體」*這是沒有意義的,也是不正確的。 –
爲什麼?對象* o =新對象();我應該忘記這個東西嗎? – user3811082
'int i;'現在'i'也是一個對象。你的術語是完全關閉的。 –
C++中沒有垃圾回收。 –
*我可以依靠返回的a.c_str()在f以外是否正確嗎?* No. –
真的不需要使用C風格的'char *'。如果你簡單地返回正確管理其內容的'std :: string',你的問題就完全消失了。如果你真的需要將'char *'傳遞給某個東西,儘量使用'c_str'。順便說一句,'c_str'給你一個'const char *',所以試圖忽略它的常量並不好。 – chris