【发布时间】:2013-02-14 01:57:18
【问题描述】:
我正在学习 C++。我有 C、C#、ObjC 背景。相当高级的语言。
在 C# 或 ObjC 上,作为函数或方法的结果返回堆分配的对象是微不足道的。因为对象的清理是管理的(按照惯例)。它会在适当的时候被销毁。
但我不知道我应该如何在 C++ 中处理这个问题。
例如,
std::string* makeString()
{
std::string* str = GetSomeStringFromArbitrarySource ();
SaveSomewhereElseInternally (str);
return str;
}
void useString ()
{
std::string* str = makeString ();
// Where and how should I cleanup the `str` object?
// It is not safe `delete str` here because it may be used on another place.
}
当堆分配对象传递给许多函数时,清理堆分配对象的推荐和常规方法是什么?
我查看了几个智能指针,但它们看起来并没有真正降低复杂性或需要关心的事情。我误解了智能指针吗?
【问题讨论】:
-
这个链接 (stackoverflow.com/questions/147130/…) 有一些关于 C++ 垃圾回收的非常好的信息,以及新标准 (C++11) 中关于它的具体信息。我知道这不是一个好的答案,但是,嘿,这是一个问题。 :)
-
为什么不只是
std::string makeString()和std::string str = makeString();?为什么要使用堆对象? -
@DavidSchwartz 因为他来自 C#,并且像 C# 一样编写代码
-
@Slava 公平地说,使用指针真的不像 C# ;)
-
@ReedCopsey 据我所知(我不是 C# 专家)那里的所有对象都是由 new 创建的。所以他可能只是在 C++ 中找到了保存 new 结果的位置并使用了它。
标签: c++ heap-memory