【发布时间】:2017-07-02 06:42:38
【问题描述】:
我是一名 Java 程序员,我是 C++ 新手,最近我一直在编写一些 C++ 代码。 我对 C++ 对象的生命周期有点困惑(在 Java 中有垃圾收集,我不必担心这个问题)。
这是我的问题。
假设我有一个函数f()
char *f() {
string a = "Hello";
return a.c_str();
}
此代码有效吗?让我困惑的是:f 内部声明的字符串a 的生命周期是多少,当f 返回时它会被垃圾回收吗?我可以依靠返回的a.c_str() 在f 之外正确吗?
【问题讨论】:
-
C++ 中没有垃圾回收。
-
我可以依靠返回的 a.c_str() 在 f 之外正确吗? 不能。
-
真的没必要用C风格的
char*。如果您简单地返回std::string,您的问题就会完全消失,它会正确管理其内容。如果您确实需要将char*传递给某物,请尽可能靠近它使用c_str。顺便说一句,c_str给了你一个const char*,所以试图忽略它的 constness 是行不通的。 -
您可以在堆上分配“Hello”字符数组并返回一个shared_ptr
。或者更好的是,按值返回 std::string。