Что такое время жизни std :: string :: c_str ()?

В одной из моих программ мне приходится взаимодействовать с некоторым устаревшим кодом, который работает с const char * .

Допустим, у меня есть структура, которая выглядит так:

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

My приложение более высокого уровня работает только с std :: string , поэтому я подумал об использовании std :: string :: c_str () , чтобы вернуть const char * указатели.

Но каков срок жизни c_str () ?

Могу ли я сделать что-то подобное, не столкнувшись с неопределенным поведением?

{
  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
}

Или я должен немедленно скопировать результат ] c_str () в другое место?

Спасибо.

92
задан ereOn 23 June 2011 в 15:12
поделиться