2011-03-27 4 views
5
std::string getMyString() { return <make a string>; } 

... 

HANDLE something = OpenSomething(getMyString().c_str(), ...); 

나는 Guaranteed lifetime of temporary in C++으로 읽었으며 과제가 평가 될 때까지 임시 문자열이 유지 될 것으로 예상됩니다. 즉, 예상 한대로 작업을 완료 할 수있을만큼 충분히 오래되었습니다.이것은 임시 std :: string의 적절한 사용입니까?

한 번 전에 ... 차라리 한 번 확인하려는 임시의 소멸자가 때까지 호출되지 않습니다

답변

7

네, 괜찮습니다. :-)

문자열은 세미콜론에서 문장의 마지막 부분에서 삭제됩니다.

8

을 (그게 뭔지 기억이 안나요)는 std::string 수명 관련 버그로 실행하는 데 함수 호출이 반환되므로 여기에서 볼 수있는 것은 안전합니다. 호출 된 함수가 char*를 저장하고 OpenSomething가 돌아왔다 후 어떻게 든 사용하고 끝나는 경우

그러나, 그 포인터를달라고 한 괜찮아요.

+0

예, 좋은 지적입니다. –

0

포인터를 getMyString.c_str()으로 되 돌리는 데 다른 인수를 사용하지 않으면 모든 것이 정상입니다.