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中文网其他相关文章!