Heim >Backend-Entwicklung >C++ >Wann wird der Destruktor eines temporären C-Objekts in einem Funktionsaufruf aufgerufen?

Wann wird der Destruktor eines temporären C-Objekts in einem Funktionsaufruf aufgerufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-13 11:57:14190Durchsuche

When is a Temporary C   Object's Destructor Called in a Function Call?

Garantierte Lebensdauer von Temporären in C

Frage:

Wann wird der Destruktor für ein temporäres Objekt aufgerufen? innerhalb eines Funktionsaufrufs erstellt, aber nicht als Parameter verwendet? Betrachten Sie insbesondere den folgenden Code:

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

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

Antwort:

Der Destruktor für das temporäre StringBuffer-Objekt wird nach dem Aufruf von GetString aufgerufen kehrt zurück.

Gemäß dem C-Standard (12.2 Temporäre Objekte) endet die Lebensdauer eines temporären Objekts am Ende des vollständigen Ausdrucks, dass (a) selbst nicht als Operand (außer bei der Konstruktion eines Klassenobjekts) in einem anderen vollständigen Ausdruck erscheint und (b) nicht Teil eines in Klammern gesetzten Ausdrucks ist.

Im Beispielcode ist der Aufruf von GetString der vollständige Ausdruck, und das temporäre StringBuffer-Objekt wird innerhalb dieses Ausdrucks erstellt. Daher endet die Lebensdauer des temporären Objekts, nachdem der Aufruf von GetString zurückgegeben wurde.

Diese lebenslange Garantie stellt sicher, dass das temporäre Objekt gültig bleibt, bis es nicht mehr benötigt wird. Dadurch können Ausdrucksvorlagen Verweise auf temporäre Objekte enthalten, da die temporären Objekte so lange bestehen bleiben, bis der Ausdruck vollständig ausgewertet ist.

Das obige ist der detaillierte Inhalt vonWann wird der Destruktor eines temporären C-Objekts in einem Funktionsaufruf aufgerufen?. 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