Ron*_*Ron 8 c++ return-value stdstring
假设你有一个全局的类(例如可用于应用程序的运行时)
class MyClass {
protected:
std::string m_Value;
public:
MyClass () : m_Value("hello") {}
std::string value() { return m_Value; }
};
MyClass v1;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,使用第一种形式给了我奇怪的行为
printf("value: %s\n", v1.value().c_str());
Run Code Online (Sandbox Code Playgroud)
看起来字符串在printf可以使用之前从内存中消失了.有时它打印值:hello其他时候它崩溃或什么都不打印.
如果我第一次复制字符串就像这样
std::string copiedString = v1.value();
printf("value: %s\n", copiedString.c_str());
Run Code Online (Sandbox Code Playgroud)
事情确实有效.
当然必须有一种方法可以避免使用临时字符串.
编辑:所以共识是使用const std :: string和返回值.
我知道每个人都说原始代码应该没问题,但我可以告诉你,我在Windows CE上看到MSVC 2005遇到了麻烦,但只能在CE盒子上.不是Win32交叉编译.
嗯,代码没有任何问题(按照我的解释)。这不是最佳的,当然也不是最佳的The Right Way (R),您应该像 villentehaspam 建议的那样修改您的代码。就像现在一样,您的代码会复制字符串,m_value因为您按值返回,这不如仅返回 const 引用。
如果您提供显示问题的完整代码示例,我可以更好地帮助您。
| 归档时间: |
|
| 查看次数: |
3442 次 |
| 最近记录: |