string 관련문의

auditory의 이미지

void func(const char* str);

타입의 함수가 있습니다.

std::string str;

std::ostringstream oss;

의 두개의 변수에 대해서

func(str.c_str());

는 잘 동작합니다. 그런데

func(oss.str().c_str())

함수는 화면에 출력되는 글자가 깨집니다.

글자는 일반 영문이고, 함수는 fltk 라이브러리의 함수로 윈도우 타이틀에 표시되는 내용입니다.

물론 cout << oss.str().c_str(); 는 잘 동작합니다.

std::string에 카피해서 쓰면 문제는 해결되는데..

문제의 원인은 무엇일까요?

kewlbear의 이미지

함수(위의 경우 std::ostringstream::str())의 반환값은 임시 객체(temporary) 이고 임시 객체는 표현식(expression)의 평가(evaluation)가 끝나면 소멸(destruction)되기 때문입니다. 위의 경우 표현식은 oss.str().c_str()입니다.