У меня есть dll, который должен использоваться с C и т. Д., Поэтому я не могу использовать строковые объекты и т. Д., Как обычно, но я не уверен, как это сделать безопасно.Вернуть динамически выделенную память с C++ на C
const char *GetString()
{
std::stringstream ss;
ss << "The random number is: " << rand();
return ss.str().c_str();
}
Может ли c строка быть уничтожена, когда ss падает со стека? Я предполагаю, что ...
Другой вариант может заключаться в том, чтобы создать новую строку в куче, но что же будет освобождать?
const char *GetString()
{
std::stringstream ss;
ss << "The random number is: " << rand();
char *out = new char[ss.str().size()];
strcpy(ss.str().c_str(), out);
return out;//is out ever deleted?
}
То же самое касается указателей на другие вещи, а также на строки.
Хорошо, хорошо, что моя dll является actauly для python, так что лучший способ сделать это? Должен ли я обернуть функции dll в функции python, которые говорят: «Call dll function; Call dll deallocate function»? Я предполагаю, что python делает полностью новую строку, а не просто обертывает вокруг нее объект? – 2008-11-12 08:30:26