C에서 임시 객체의 수명
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; }; void GetString(char * str, int maxlength); std::string mystring; GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
이 예에서는 임시 StringBuffer 개체가 생성되고 해당 크기 () 메소드는 버퍼에 대한 포인터를 얻기 위해 호출됩니다. 그런 다음 이 포인터는 GetString() 함수에 전달됩니다.
임시 StringBuffer 개체의 수명은 GetString()에 대한 호출인 전체 표현식이 끝날 때까지 보장됩니다. 따라서 임시 개체에 대한 소멸자는 GetString()이 반환된 후에 호출됩니다. 이 동작은 사용되는 컴파일러에 관계없이 일관됩니다.
이 보장된 수명은 임시 개체가 생성된 표현식이 끝날 때까지 유효하다는 사실에 의존하는 표현식 템플릿에 매우 중요합니다.
위 내용은 C 표현식에서 임시 객체는 얼마나 오래 지속됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!