std::string::c_str()의 수명 결과
질문:
const char 포인터를 사용하는 레거시 코드와 인터페이스하는 프로그램에서 개발자는 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) }
답변:
std::string::c_str() 결과의 수명은 다음에 따라 다릅니다. 문자열의 수명 및 후속 수정 사항. 문자열이 수정되거나 삭제되면 결과가 유효하지 않게 됩니다. 따라서 나중에 사용하기 위해 결과를 저장하려는 경우 일반적으로 결과의 복사본을 만드는 것이 좋습니다.
제공된 코드 조각에서 std::strings(서버 및 이름)는 다음 범위 내에서 생성 및 수정됩니다. 코드 블록. c_str() 결과(foo.server 및 foo.name)는 범위 끝에서 삭제되는 임시 std::strings를 가리킵니다.
그러나 문자열은 범위 외부에서 사용되지 않습니다. , use_foo() 및 ~Foo()에서 const char 포인터를 계속 사용하는 것이 기술적으로 안전합니다. 그러나 이러한 함수가 잠재적으로 포인터를 다른 위치로 복사하는 경우 단순히 포인터를 복사하는 대신 실제 복사본을 만들어야 합니다.
따라서 코드 조각은 이 특정 사례에서 기술적으로 올바른 동작을 보여주지만 좋은 코딩 방법은 다음과 같습니다. 나중에 사용하기 위해 저장해야 하는 경우 c_str() 결과의 복사본을 만드는 것이 포함됩니다.
위 내용은 `std::string::c_str()` 포인터는 얼마나 오랫동안 유효한가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!