将 ptr 传递给返回的 std::string
Passing ptr to returned std::string
这段代码安全吗?就因为它运行没有错误,我担心我给自己设了一个陷阱。
void targetMethod( const char *arg );
std::string helperMethod( char *text ) { return std::string( text ); }
targetMethod( helperMethod().c_str() );
helperMethod() returns a std::string,调用代码获取其底层 char*,并将其传递给 targetMethod()。我担心返回的字符串是临时的,因此获取其底层 char* 是危险的。所以我应该做这样的事情:
std::string myTemp = helperMethod( "hello" );
targetMethod( myTemp.c_str() );
临时文件会一直存在到表达式结束(直到分号),所以它是安全的。
话虽如此,我完全不确定您为什么需要 helperMethod,因为您可以从 const char *.
构造一个 std::string
这取决于 targetMethod
做什么。如果它将指针存储起来供以后使用,那么不,它不安全。但如果它只是在函数调用期间使用它,那么是的,它是安全的。字符串的生命周期延伸到创建它的完整表达式的末尾。
这段代码安全吗?就因为它运行没有错误,我担心我给自己设了一个陷阱。
void targetMethod( const char *arg );
std::string helperMethod( char *text ) { return std::string( text ); }
targetMethod( helperMethod().c_str() );
helperMethod() returns a std::string,调用代码获取其底层 char*,并将其传递给 targetMethod()。我担心返回的字符串是临时的,因此获取其底层 char* 是危险的。所以我应该做这样的事情:
std::string myTemp = helperMethod( "hello" );
targetMethod( myTemp.c_str() );
临时文件会一直存在到表达式结束(直到分号),所以它是安全的。
话虽如此,我完全不确定您为什么需要 helperMethod,因为您可以从 const char *.
构造一个 std::string这取决于 targetMethod
做什么。如果它将指针存储起来供以后使用,那么不,它不安全。但如果它只是在函数调用期间使用它,那么是的,它是安全的。字符串的生命周期延伸到创建它的完整表达式的末尾。