由于我无法控制的原因,我需要从函数返回 const char*
,但我不知道 char
在编译时需要是什么.我的解决方案如下所示:
const char* __str__() {
static std::string String;
String = [some fancy stuff];
return String.c_str();
}
static
可防止字符串在退出函数时被破坏,但这也意味着内存会一直存在,直到我的程序退出(对吗?)。因为返回的字符串有时可能很大 (GB),这可能是一个真正的问题。
我通常不惜一切代价避免使用指针,只对类成员使用 static
,所以我不是 100% 确定我在做什么。这保证有效吗?有没有更好的办法?
[这道题的上下文是在python中打印一个复杂的对象,使用__str__
方法。我在我的 C++ 代码中定义该方法,然后由 SWIG 包装。 SWIG 示例显示了 static
的使用,但我不清楚这是唯一的方法。我愿意接受建议。]
最佳答案
static
除了分配范围之外还有其他问题:
- 函数不可重入
- 当调用者完成返回值时没有办法清理
任何不返回值并让调用者释放它的理由?:
const char* __str__() {
char *s = malloc(2 * 1024 * 1024 * 1024); // 2 GB
[some fancy stuff with s];
return s;
}
...
const char *magic = __str__();
[do something with magic]
free (magic); magic = NULL; // all done
关于c++ - 返回 const char*;静电有多难看?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814040/