Как я могу позволить lua стать владельцем возвращаемого значения при использовании tolua ++?

Вот мой код C ++:

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

Я знаю, когда функция вернется, result будет освобожден, и Луа ничего не получит, если я назову это Луа. я нуждаюсь new Тот, кто запретил ему быть освобожденным. Но это приведет к утечке памяти. Поэтому я должен позволить Луа взять на себя ответственность за возвращаемое значение.

Я знаю как это сделать используя lua_State, Но я пользуюсь комментарий выставить мои c ++ функции lua, поэтому мне интересно, есть ли подобный способ добиться этого?

2

Решение

Это не имеет ничего общего с вашей привязкой к Луа. Когда вы возвращаетесь из функции, результирующая строка уничтожается, и указатель, указывающий на ее внутренний буфер, будет указывать на освобожденную память. Нет никакого момента, когда у библиотеки есть шанс стать владельцем этой строки, потому что в конечном итоге она просто выполняет вызов функции, и результат становится доступным только после того, как функция вернулась (к этому времени она не может использоваться). После беглого поиска в гугле, Я думаю, что Tolua ++ поддерживает std::string вернуть значения, чтобы вы могли сделать это:

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

Это будет работать, потому что строка скопирована.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]