gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:29 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com