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; }; void GetString(char * str, int maxlength); std::string mystring; GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
在此示例中,创建了一个临时 StringBuffer 对象及其大小调用 () 方法来获取指向缓冲区的指针。然后将该指针传递给 GetString() 函数。
临时 StringBuffer 对象的生命周期得到保证,直到完整表达式结束,即对 GetString() 的调用。因此,临时对象的析构函数将在 GetString() 返回后调用。无论使用什么编译器,此行为都是一致的。
这种保证的生命周期对于表达式模板至关重要,它依赖于这样一个事实:临时对象将保持有效,直到创建它们的表达式结束为止。
以上是临时对象在 C 表达式中存在多久?的详细内容。更多信息请关注PHP中文网其他相关文章!