2016-03-23 7 views
2

Hier ist meine C++ Code:Wie kann ich lua die Verantwortung für den Rückgabewert bei der Verwendung von tolua ++ überlassen?

// tolua_begin 
const char* GetSomeString() { 
    std::string result; 
    // do something 
    return result.c_str(); 
} 
// tolua_end 

Ich weiß, wann die Funktion Rückkehr wird result und lua nichts bekommen befreit werden, wenn ich es in lua nennen. Ich brauche new eins zu verboten es befreit werden. Aber es wird Speicherverlust verursachen. Also sollte ich lua den Besitz des Rückgabewertes übernehmen lassen.

Ich weiß, wie dies mit lua_State. Aber ich benutze Kommentar, um meine C++ - Funktionen zu lua offen zu legen, also frage ich mich, ob es einen ähnlichen Weg gibt, um es zu erreichen?

Antwort

3

Das hat nichts mit Ihrer Lua-Bindung zu tun. Wenn Sie von der Funktion zurückkehren, wird die Ergebniszeichenfolge zerstört, und der Zeiger, der auf seinen internen Puffer verweist, zeigt auf freigegebenen Speicher. Es gibt keinen Zeitpunkt, zu dem die Bibliothek die Chance hat, diese Zeichenfolge zu übernehmen, weil sie letztlich nur einen Funktionsaufruf ausführt und das Ergebnis erst verfügbar ist, nachdem die Funktion zurückgegeben wurde (zu diesem Zeitpunkt ist sie nicht mehr verwendbar). After a cursory google search, ich denke tolua ++ unterstützt std::string Rückgabewerte, so können Sie dies tun könnte:

// tolua_begin 
std::string GetSomeString() { 
    std::string result; 
    // do something 
    return result; 
} 
// tolua_end 

Dies funktioniert, weil die Zeichenkette kopiert wird.

+0

Ja, string funktioniert, danke! – zzy

Verwandte Themen