2016-12-12 1 views
0

cppreferences에 따르면 explicit runtime_error(const std::string& what_arg);what_arg의 콘텐츠를 복사하지 않습니다.std :: runtime_error의 ctor에 전달 된 문자열 객체의 수명은 어떻게됩니까?

안전하게 임시 문자열 개체를 std::runtime_errorctor으로 전달할 수 있습니까? 예를 들어

:

std::string GetATempString(const char* msg) 
{ 
    return { msg }; 
} 

int main() 
{ 
    try { 
     throw std::runtime_error(GetATempString("Hello")); 
    } catch (const std::runtime_error& e) 
    { 
      e.what(); // Is it guaranteed that "Hello" would be returned safely? 
    } 
} 
+1

콘텐츠가 복사되지 않는다고하는 곳은 어디입니까? – immibis

답변

5

당신은 오해. std::runtime_error은 복사 할 때 나중에 예외를 throw하지 않기 때문에 항상 문자열을 참조 횟수 기록 복사 내부 버퍼에 복사합니다.

+0

"참조 카운트 카피시 복사"- 이유가 무엇입니까? 문자열이 언제 수정됩니까? – Paul

관련 문제