首页 >后端开发 >C++ >C 临时对象的寿命有多长?

C 临时对象的寿命有多长?

Barbara Streisand
Barbara Streisand原创
2024-12-23 13:36:02480浏览

How Long Do C   Temporary Objects Live?

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

如果我们按如下方式使用此类:

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

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

临时 StringBuffer 对象的析构函数将在 GetString 返回后调用。此行为由 C 标准保证,并允许在函数调用中可靠地使用临时对象。

标准指定临时对象的生命周期延伸到完整表达式的末尾,即最外层不属于任何其他表达式的表达式。在这种情况下,完整表达式就是函数调用,因此临时对象的生命周期会延长,直到函数返回为止。

这种保证对于表达式模板至关重要,它可以在复杂表达式中保存对临时对象的引用。它确保对象在计算整个表达式之前保持有效。

以上是C 临时对象的寿命有多长?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn