>백엔드 개발 >C++ >`std::string::c_str()` 포인터는 얼마나 오랫동안 유효한가요?

`std::string::c_str()` 포인터는 얼마나 오랫동안 유효한가요?

DDD
DDD원래의
2024-12-12 16:38:17505검색

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.