기술적으로 코드는 괜찮습니다.
그러나 당신은 코드를 모르는 누군가를 위해 쉽게 깨뜨리는 방식으로 작성했습니다. c_str ()의 경우 유일한 안전한 사용법은 매개 변수로 함수에 전달할 때입니다. 그렇지 않으면 유지 보수 문제가 발생합니다.
예 1 :
{
std::string server = "my_server";
std::string name = "my_name";
Foo foo;
foo.server = server.c_str();
foo.name = name.c_str();
//
// Imagine this is a long function
// Now a maintainer can easily come along and see name and server
// and would never expect that these values need to be maintained as
// const values so why not re-use them
name += "Martin";
// Oops now its broken.
// We use foo
use_foo(foo);
// Foo is about to be destroyed, before name and server
}
따라서 유지 관리를 위해 다음 사항을 명확히하십시오.
더 나은 솔루션 :
{
// Now they can't be changed.
std::string const server = "my_server";
std::string const name = "my_name";
Foo foo;
foo.server = server.c_str();
foo.name = name.c_str();
use_foo(foo);
}
그러나 const 문자열이 있으면 실제로 필요하지 않습니다.
{
char const* server = "my_server";
char const* name = "my_name";
Foo foo;
foo.server = server;
foo.name = name;
use_foo(foo);
}
확인. 어떤 이유로 그들을 문자열로 원합니다
. 호출에서만 사용하지 않는 이유 :
{
std::string server = "my_server";
std::string name = "my_name";
// guaranteed not to be modified now!!!
use_foo(Foo(server.c_str(), name.c_str());
}
.c_str()
. 나는const char*
영원히 살지 않는다는 것을 이해할 때까지 때때로 끈의 일부만 얻는 이유를 이해하지 못했지만 끈이 파괴 될 때까지