2017-02-14 44 views
0

我是一名Java程序員,我是C++新手,最近我正在編寫一些C++代碼。 (在Java中有GC,我不必擔心這個問題)在函數內部定義的C++對象的生命週期

這是我的問題。 假設我有一個函數f()

char *f() { 

    string a = "Hello"; 

    return a.c_str(); 

} 

將這段代碼是有效的,我的困惑是什麼是f內聲明的字符串的生命週期,這將是GC-ED當f回報?我能否依靠返回的a.c_str()在f外部正確?

+0

C++中沒有垃圾回收。 –

+0

*我可以依靠返回的a.c_str()在f以外是否正確嗎?* No. –

+0

真的不需要使用C風格的'char *'。如果你簡單地返回正確管理其內容的'std :: string',你的問題就完全消失了。如果你真的需要將'char *'傳遞給某個東西,儘量使用'c_str'。順便說一句,'c_str'給你一個'const char *',所以試圖忽略它的常量並不好。 – chris

回答

-1

C++還沒有像java這樣的垃圾收集器。如果你創建一個對象,那麼你需要自己銷燬它。在函數中定義的所有變量在從此函數退出時將被銷燬(除了需要自己銷燬的對象)

+0

*「除了需要自己摧毀的物體」*這是沒有意義的,也是不正確的。 –

+0

爲什麼?對象* o =新對象();我應該忘記這個東西嗎? – user3811082

+0

'int i;'現在'i'也是一個對象。你的術語是完全關閉的。 –