void foo(const char* s) { }
foo("bar");
- 內存
bar
在哪裏解除分配? - 在函數參數中使用匿名字符串處理最舒適和無內存泄漏的練習是什麼? (我知道應該沒有魔法字符串,只是好奇而已。)
void foo(const char* s) { }
foo("bar");
bar
在哪裏解除分配?在你的例子中,參數是一個字符串文字,它具有靜態生命週期,並且永遠不會被刪除。
bar的內存是在編譯時分配的。因此,它永遠不必被釋放。
在C++二進制文件中有不同的部分。一些例子是文本(代碼被存儲),堆棧和堆。還有一段只讀的靜態內存。我相信這是存儲字符串的地方。
由於字符串不在堆上,因此不需要釋放。
「bar」在數據部分定義,地址將在您擁有它的所有地方替換它。 foo函數將被一個指向該地址的指針調用。
在C++中,你應該使用std :: string而不是char * – W55tKQbuRu28Q4xv 2012-07-18 08:05:32
在這裏使用包裝類有什麼好處嗎? – 2012-07-18 08:07:12
有幾個與此主題有關的SO問題。顯然,在大多數常見的體系結構中,字符串文字直接編譯到DATA段中,並根據主機操作系統的分頁規則加載[http://stackoverflow.com/questions/2589949/c-string-literals-where-do - 他們去] [http://stackoverflow.com/questions/1971183/when-does-c-allocate-deallocate-string-literals] – nurettin 2012-07-18 08:10:44