Heim >Backend-Entwicklung >C++ >Wie lange leben temporäre Objekte in C-Ausdrücken?
Lebensdauer temporärer Objekte in C
In C werden temporäre Objekte erstellt, wenn Ausdrücke ausgewertet werden. Der Verweis auf ein temporäres Objekt ist bis zum Ende seines vollständigen Ausdrucks gültig. Dies ist der äußerste Ausdruck, bei dem das temporäre Objekt nicht Teil eines anderen Ausdrucks ist. Dadurch können temporäre Objekte als Argumente in Funktionsaufrufen verwendet und von Funktionen zurückgegeben werden.
Betrachten Sie das folgende Beispiel:
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);
In diesem Beispiel wird ein temporäres StringBuffer-Objekt erstellt und seine Größe festgelegt ()-Methode wird aufgerufen, um einen Zeiger auf einen Puffer zu erhalten. Dieser Zeiger wird dann an die Funktion GetString() übergeben.
Die Lebensdauer des temporären StringBuffer-Objekts ist bis zum Ende des vollständigen Ausdrucks, dem Aufruf von GetString(), garantiert. Daher wird der Destruktor für das temporäre Objekt aufgerufen, nachdem GetString() zurückgegeben wurde. Dieses Verhalten ist unabhängig vom verwendeten Compiler konsistent.
Diese garantierte Lebensdauer ist entscheidend für Ausdrucksvorlagen, die auf der Tatsache beruhen, dass temporäre Objekte bis zum Ende des Ausdrucks, in dem sie erstellt werden, gültig bleiben.
Das obige ist der detaillierte Inhalt vonWie lange leben temporäre Objekte in C-Ausdrücken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!