临时物体的寿命

And*_*nck 3 c++

我遇到了以下代码(粗略地):

struct StringBuffer {
    StringBuffer(const char* string) {strcpy(m_buffer, string);}
    const char* c_str() const {return m_buffer;}
    char m_buffer[128];
};


std::string foobar() {
    const char* buffer = StringBuffer("Hello World").c_str();
    return std::string(buffer);
}
Run Code Online (Sandbox Code Playgroud)

假设在行之后我是否正确:

    const char* buffer = StringBuffer("Hello World").c_str();
Run Code Online (Sandbox Code Playgroud)

buffer指向解构StringBuffer对象中的指针?

Som*_*ude 6

最后回答你的问题,是的,buffer将是一个迷路的指针.

为了回答关于临时值的生命周期的更一般的问题,我建议你阅读这个参考文献说:

...所有的临时演员都被摧毁,作为评估全曲面的最后一步(词法上)包含创建它们的点......

对于您的情况,这意味着一旦完成赋值buffer,临时对象就会被破坏.