2016-09-15 96 views
0

我有一個相對較大的std :: string。我想將它傳遞給Java而不復制。然後傳回另一個JNI庫。什麼是最好的方法?Android JNI:將std :: string傳遞給Java並返回到C++

jlong some_jni_call() { 
    string str = createLargeString(); // say this is from 3rd lib only returns string 
    string* strInHeap = new string(str); // this should just increase the reference count? 
    jlong handle = (long)strInHeap; 
    return handle; 
} 

這樣我就可以回傳給JNI:

void use_string(jlong handle) { 
    string* str = (string*)handle; 
    // use the str... 
    delete str; // doesn't look so nice, since people can forget to delete 
} 

這是一個好辦法?

+0

'string * strInHeap = new string(str)'創建'str'的​​一個副本。 std:.string不是引用計數。 –

+0

它似乎是某些情況下的引用計數:http://stackoverflow.com/questions/12520192/is-stdstring-refcounted-in-gcc-4-x-c11 – counter

回答

0

這當然是一種可行的方法;你甚至可以使用類似的技巧來回傳遞函數指針。

相關問題