Rumah > pembangunan bahagian belakang > C++ > Berapa Lama Penunjuk `std::string::c_str()` Kekal Sah?

Berapa Lama Penunjuk `std::string::c_str()` Kekal Sah?

DDD
Lepaskan: 2024-12-12 16:38:17
asal
504 orang telah melayarinya

How Long Do `std::string::c_str()` Pointers Remain Valid?

Seumur hidup std::string::c_str() Keputusan

Soalan:

Dalam atur cara yang berantaramuka dengan kod warisan yang menggunakan penunjuk char const, pembangun bertanya tentang jangka hayat std::string::c_str() keputusan. Mereka secara khusus bertanya sama ada coretan kod berikut selamat:

{
  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)
}
Salin selepas log masuk

Jawapan:

Hayat std::string::c_str() keputusan bergantung pada hayat rentetan dan sebarang pengubahsuaian seterusnya. Hasilnya menjadi tidak sah jika rentetan diubah suai atau dimusnahkan. Oleh itu, membuat salinan hasil biasanya disyorkan apabila berhasrat untuk menyimpannya untuk kegunaan masa hadapan.

Dalam coretan kod yang disediakan, std::strings (pelayan dan nama) dicipta dan diubah suai dalam skop blok kod. Hasil c_str() (foo.server dan foo.name) menunjuk kepada std::strings sementara ini, yang dimusnahkan pada penghujung skop.

Walau bagaimanapun, rentetan tidak digunakan di luar skop , menjadikannya selamat secara teknikal untuk terus menggunakan penunjuk const char dalam use_foo() dan ~Foo(). Walau bagaimanapun, jika fungsi ini berpotensi menyalin penunjuk ke lokasi lain, salinan benar harus dibuat dan bukannya hanya menyalin penunjuk.

Oleh itu, sementara coretan kod menunjukkan tingkah laku yang betul secara teknikal dalam kes khusus ini, amalan pengekodan yang baik akan melibatkan membuat salinan hasil c_str() jika ia perlu disimpan untuk kegunaan kemudian.

Atas ialah kandungan terperinci Berapa Lama Penunjuk `std::string::c_str()` Kekal Sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan