我正在学习 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.
}
当通过许多函数传递时,清理堆分配对象的推荐和常规方法是什么?
我查看了几个智能指针,但它们看起来并没有真正降低复杂性或需要关心的事情。我误解了智能指针吗?