所以我在过去几个月里生成了一些代码,或许更多,我使用C ++字符串库来连接字符串。像这样:
template< typename T >
string tostr( const T & val ); // implmented wherever
void somelibraryfunction( const char * );
// begin actual code
somelibraryfunction( ( "foo" + tostr( 5 ) ).c_str( ) );
这编译并正常工作。我担心的是,在创建c_str
的地址之后,创建的字符串临时被销毁,而我只是依赖于读取最近释放但未清除的内存。有什么想法吗?
答案 0 :(得分:7)
在整个语句完成之前,临时字符串不会被销毁,直到库函数返回之后。只要该函数不在某处保存该地址的副本供以后使用,您的代码就可以了。 (存储字符串 contents 的副本很好;它只是不应该存储char*
指针值,当临时字符串消失时它会变为无效。)