传递字符串问题
passing string around question
>我有一个成员函数,比如
setResult(const std::string &s)
{
this->m_result = s;
}
经过检查,我发现this->m_result
的地址与s
相同。如果堆栈对象是堆栈对象,当s
超出范围时s
m_result
会消失(或成为垃圾)吗?
可能不是;如果m_result
是 std::string,它将深度复制数据内容。
无论如何,在像分配运算符这样的地方,您通常会检查这种自我分配。 成语是:
obj& operator=(const obj& o) {
if ( this != &o ) // ...
}
您的情况也是如此,您可能会检查它&m_result
与传入的字符串不同。 但是 std::string 通常是为了实现自复制是可以的。
实际上s
不是堆栈对象,因为它是一个引用(引用本身是一个堆栈对象,但字符串不是)。实际上,如果您将this->m_result
传递给testResult
,实际上this->m_result
只能与s具有相同的地址,但是尽管自我分配毫无用处,但在这种情况下它不会造成任何伤害。
编辑:另一种情况可能是,this->m_result
不是std::string,而是对它的引用。然后你遇到了一个问题,因为你得到了对一个被破坏对象的引用。请记住,引用只不过是一个指针(只是使用起来更舒适并且功能减少)。
相关文章:
- 编译包含字符串的代码时遇到问题
- setlocale的C++土耳其字符串问题
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 我的逻辑反转字符串中的元音有什么问题?
- 按字母顺序对C++问题中的子字符串索引进行分区
- 用户输入字符串的文件附加问题..C++
- 使用 minijson-reader 库读取 JSON 字符串时出现问题
- 在将字符串放入字符串向量时遇到问题?
- 将文件复制到自定义位置,存在字符串转换问题
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 不确定出了什么问题(字符串输入)
- 反向和计数字符串的 C++ 问题
- 反转具有返回值的字符串时出现问题
- C++字符串问题-如何访问字符串元素
- public:静态常量字符串声明/初始化问题
- 在MySql中使用字符串操作函数有什么问题
- Libwesockets.h:lws_write:C++字符串到C的转换和发送问题
- 问题:字符串在另一个字符串上写入
- 日志文件输出的问题-字符串和c_str之间的差异- c++