std::string::c_str() 結果的生命週期
問題:
問題:{ std::string server = "my_server"; std::string name = "my_name"; Foo foo; foo.server = server.c_str(); foo.name = name.c_str(); // use Foo // Foo about to be destroyed (before name and server) }
問題:
問題:
問題:
問題:問題:問題:問>在與使用const char在指標的遺留程式碼介面的程式中,開發人員查詢std::string::c_str() 結果。他們特別詢問以下程式碼片段是否安全:答案:std::string::c_str() 結果的生命週期取決於字串的生命週期以及任何後續修改。如果字串被修改或破壞,結果將無效。因此,當打算儲存結果以供將來使用時,通常會建議複製結果。 在提供的程式碼片段中,std::strings(伺服器和名稱)在以下範圍內建立和修改:程式碼區塊。 c_str() 結果(foo.server 和 foo.name)指向這些暫存 std::string,它們在作用域結束時被銷毀。 但是,這些字串不會在作用域之外使用,這使得在 use_foo() 和 ~Foo() 中繼續使用 const char 指標在技術上是安全的。但是,如果這些函數可能將指標複製到其他位置,則應進行真正的複製,而不是簡單地複製指標。 因此,雖然程式碼片段在這種特定情況下展示了技術上正確的行為,但良好的編碼實踐將如果需要儲存c_str() 結果以供以後使用,則需要複製c_str() 結果。以上是`std::string::c_str()` 指標保持有效多久?的詳細內容。更多資訊請關注PHP中文網其他相關文章!