传递字符串问题

时间:2011-05-16 22:29:00

标签: c++

我有一个像

这样的成员函数
setResult(const std::string &s)
{
         this->m_result = s;
}

检查后,我发现this->m_result的地址与s相同。如果m_result是堆栈对象,s超出范围时s会消失(或变成垃圾)吗?

2 个答案:

答案 0 :(得分:0)

可能不是;如果m_result是std :: string,它将深层复制数据内容。

无论如何,在分配操作员这样的地方,你通常会检查这种自我分配。成语是:

obj& operator=(const obj& o) {
    if ( this != &o ) // ...
}

对于您的情况也是如此,您可以检查它&m_result与传入的字符串不同。但是通常会实现std :: string,以便自我复制。

答案 1 :(得分:-1)

有效s不是堆栈对象,因为它是一个引用(引用本身是一个堆栈对象,但字符串不是)。实际上,如果您将this->m_result传递给this->m_resulttestResult只能拥有与s相同的地址,但是虽然自我分配毫无用处,但在这种情况下它不会造成任何伤害。

编辑:另一种情况可能是,this->m_result不是std :: string,而是对它的引用。然后,当您获得对被破坏对象的引用时,您遇到了问题。请记住,引用只不过是一个指针(使用起来更舒适,功能更少)。