SORU
23 HAZİRAN 2011, PERŞEMBE


Std::string::c_str() ömür boyu?

Benim programlardan birinde, const char* ile çalışan bazı eski kod ile arayüzü var.

Benzeyen bir yapısı var diyelim:

struct Foo
{
  const char* server;
  const char* name;
};

Üst düzey başvurum sadece std::string::c_str() const char* işaretçiler geri almak için kullanmayı düşündüm std::string, ile ilgilenir.

Ama c_str() ömrü nedir ?

Tanımsız davranış bakan olmadan böyle bir şey yapabilir miyim ?

{
  std::string server = "my_server";
  std::string name = "my_name";

  Foo foo;
  foo.server = server.c_str();
  foo.name = name.c_str();

  // We use foo
  use_foo(foo);

  // Foo is about to be destroyed, before name and server
}

Ya da hemen başka bir yere c_str() sonucu kopyalamak mı gerekiyor ?

Teşekkür ederim.

CEVAP
23 HAZİRAN 2011, PERŞEMBE


c_str() sonuç std::string yok ise veya dize olmayan sabit üye işlev çağrılırsa geçersiz olur. Bu yüzden, genellikle eğer etrafında tutmak isterseniz, bir kopyasını yapmak isteyeceksiniz.

Örnek durumunda, c_str() sonuçları dizeleri bu kapsamda süre değiştirilmez, çünkü güvenli bir şekilde kullanılır gibi görünüyor. (Ancak, use_foo() ~Foo() Bu değerler ile ne yaptığına bilmiyoruz; eğer dizeleri, onlar başka bir kopyası varsa, o zaman bir doğru yapmalılarkopyalasadece kopyalama char işaretçileri , ve.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matt Harding

    Matt Harding

    23 Mayıs 2006
  • merumputdotcom

    merumputdotc

    24 ŞUBAT 2012
  • segtlim

    segtlim

    21 EKİM 2008