临时物体的寿命

时间:2015-06-04 14:00:05

标签: 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);
}

我认为在行之后是正确的:

    const char* buffer = StringBuffer("Hello World").c_str();

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

2 个答案:

答案 0 :(得分:7)

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

要回答有关临时值生命周期的更一般性问题,建议您阅读this reference说明:

  

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

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

答案 1 :(得分:4)

按照惯例,像std :: string :: c_str()这样的函数不用于缓存,因为即使它指向非临时对象,它也可能通过重新分配它指向的字符串而失效。