2017-05-08 47 views
0

此代码是否安全?只是因为它没有错误地运行,我担心我正在为自己设置一个陷阱。将ptr传递给返回的std :: string

void targetMethod(const char *arg); 
std::string helperMethod(char *text) { return std::string(text); } 

targetMethod(helperMethod().c_str()); 

helperMethod()返回的std :: string,并调用代码获取其潜在的char *,并将它传递给targetMethod()。我担心返回的字符串是临时的,因此考虑它的底层char *是危险的。所以相反,我应该这样做:

std::string myTemp = helperMethod("hello"); 
targetMethod(myTemp.c_str()); 
+0

谢谢,科迪。我需要磨砺我的搜寻。 – MJF

回答

2

这取决于targetMethod做什么。如果它将指针存储起来供以后使用,则不,这是不安全的。但是如果它只是在函数调用期间使用它,那么是的,它是安全的。字符串的生命周期延伸到创建它的完整表达式的末尾。

2

临时将直到表达式结尾(直到分号),因此它是安全的。

话虽如此,我不知道你为什么需要helperMethod,因为你可以从const char *构造一个std :: string。

+0

“所以它是安全的” - 只要'targetMethod'不保存指针的副本。 – lcs

+0

是的。其他答案添加了“复制指针”警告,并且是正确的。 –

+0

helperMethod()在现实世界中做得更多;它看起来像它在示例中仅用于显示发生了什么。 – MJF

相关问题