问题描述
const char* chr = env->GetStringUTFChars(myjstring, NULL);
std::string cstr(chr);
env->ReleaseStringUTFChars(myjstring, chr);
上面代码中字符串数据的相同副本是
myjstring(副本1)
chr(副本2)
cstr(副本3)//字符串操作将很容易。
因此,在编写Java JNI编程时,为了避免字符串数据的一个副本,如果在上述情况下避免使用std :: string并使用char * ?,那将是一种最佳实践。
1楼
GetString / ReleaseString不一定要复制。 他们应该创建一个引用,以确保Java不会无意中释放内存。
std :: string构造函数将得到一个(可能被截断)-'\\ 0'将阻止std :: string解析字符串的数据视图。
因此,如果std :: string提供的功能超出了副本的内存成本,那将是一个平衡。 通常,它与
int function( std::string to_be_used ){
to_be_used是字符串的新副本,并且将具有(C ++ 11>)数据的完整副本。