c++ - 返回 const char*;静电有多难看?

标签 c++ python c swig

由于我无法控制的原因,我需要从函数返回 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/

相关文章:

python - Pandas :取多个数据框的中位数

c - 警告 : field width specifier '*' expects argument of type 'int' , 但参数 2 的类型为 'size_t' {aka 'long unsigned int' }

c - 停止字符串数组

c - 在 C 中手动从递归获取输出

c++ - 如何将 dramsim2 库接口(interface)与 PINtool 链接

c++ - 看不懂std::move的实现

c++ - 如何以编程方式获取 Windows 进程的线程计数?

python - 合并字典

python - 单击 Scrapy-Splash 中的显示按钮

c++ - 只有构造函数采用成员初始值设定项