C ++는 함수 호출 내에서 생성되었지만 매개 변수로 사용되지 않는 임시 변수의 수명을 보장합니까? 다음은 클래스의 예입니다.
class StringBuffer
{
public:
StringBuffer(std::string & str) : m_str(str)
{
m_buffer.push_back(0);
}
~StringBuffer()
{
m_str = &m_buffer[0];
}
char * Size(int maxlength)
{
m_buffer.resize(maxlength + 1, 0);
return &m_buffer[0];
}
private:
std::string & m_str;
std::vector<char> m_buffer;
};
사용 방법은 다음과 같습니다.
// this is from a crusty old API that can't be changed
void GetString(char * str, int maxlength);
std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
임시 StringBuffer 객체의 소멸자는 언제 호출됩니까? 그것은 :
- GetString을 호출하기 전에?
- GetString이 반환 된 후?
- 컴파일러 의존성?
C ++는 로컬 임시 변수에 대한 참조가있는 한 유효하다는 것을 보장한다는 것을 알고 있습니다. 멤버 변수에 대한 참조가있을 때 부모 개체에 적용됩니까?
감사.
m_str.reserve(maxlength)에 char * Size(int maxlength)그렇지 않으면 소멸자 던질 수있다.