Heim >Backend-Entwicklung >C++ >Wie lange leben temporäre C-Objekte?

Wie lange leben temporäre C-Objekte?

Barbara Streisand
Barbara StreisandOriginal
2024-12-23 13:36:02475Durchsuche

How Long Do C   Temporary Objects Live?

Lebensdauer temporärer Objekte in C

C stellt sicher, dass die Lebensdauer einer temporären Variablen bis zum Ende des vollständigen Ausdrucks reicht, in dem sie erstellt wurde. Dies gilt für temporäre Objekte wie solche, die in Funktionsaufrufen erstellt werden, ohne dass sie als Parameter übergeben werden.

Betrachten Sie beispielsweise die folgende Klasse:

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;
};

Wenn wir diese Klasse wie folgt verwenden:

// Crusty old API that cannot be changed
void GetString(char* str, int maxlength);

std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);

Der Destruktor für das temporäre StringBuffer-Objekt wird aufgerufen, nachdem GetString zurückgegeben wurde. Dieses Verhalten wird durch den C-Standard garantiert und ermöglicht die zuverlässige Verwendung temporärer Objekte in Funktionsaufrufen.

Der Standard legt fest, dass die Lebensdauer eines temporären Objekts bis zum Ende des vollständigen Ausdrucks reicht, also am äußersten Ende Ausdruck, der nicht Teil eines anderen Ausdrucks ist. In diesem Fall ist der vollständige Ausdruck der Funktionsaufruf, sodass die Lebensdauer des temporären Objekts bis zur Rückkehr der Funktion verlängert wird.

Diese Garantie ist entscheidend für Ausdrucksvorlagen, die Verweise auf temporäre Objekte innerhalb komplexer Ausdrücke enthalten können. Es stellt sicher, dass die Objekte gültig bleiben, bis der gesamte Ausdruck ausgewertet ist.

Das obige ist der detaillierte Inhalt vonWie lange leben temporäre C-Objekte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn