Вот мой код C ++:
// tolua_begin
const char* GetSomeString() {
std::string result;
// do something
return result.c_str();
}
// tolua_end
Я знаю, когда функция вернется, result
будет освобожден, и Луа ничего не получит, если я назову это Луа. я нуждаюсь new
Тот, кто запретил ему быть освобожденным. Но это приведет к утечке памяти. Поэтому я должен позволить Луа взять на себя ответственность за возвращаемое значение.
Я знаю как это сделать используя lua_State
, Но я пользуюсь комментарий выставить мои c ++ функции lua, поэтому мне интересно, есть ли подобный способ добиться этого?
Это не имеет ничего общего с вашей привязкой к Луа. Когда вы возвращаетесь из функции, результирующая строка уничтожается, и указатель, указывающий на ее внутренний буфер, будет указывать на освобожденную память. Нет никакого момента, когда у библиотеки есть шанс стать владельцем этой строки, потому что в конечном итоге она просто выполняет вызов функции, и результат становится доступным только после того, как функция вернулась (к этому времени она не может использоваться). После беглого поиска в гугле, Я думаю, что Tolua ++ поддерживает std::string
вернуть значения, чтобы вы могли сделать это:
// tolua_begin
std::string GetSomeString() {
std::string result;
// do something
return result;
}
// tolua_end
Это будет работать, потому что строка скопирована.
Других решений пока нет …