需要释放具有保留内存的 c++ Do 局部变量

c++ Do Local variables, with reserved memory, need to be freed?

本文关键字:c++ Do 局部变量 保留内存 释放      更新时间:2023-10-16

我有一个简单的问题。我一直在寻找答案,但我可能没有找到正确的标签或单词来找到解决方案......

问题是,正如标题所说:局部变量(具有保留内存)是否需要释放?例如,我的意思是,如果我有以下功能:

myClass* myFunction(){
myClass* A = new myClass;
return A;
}

如果是"是",我应该在哪里称呼"删除"? "返回"之前和之后都是无稽之谈......

我说的对吗?

除非需要,否则不要使用new

这样可以避免new,因此不需要删除

myClass myFunction(){
    myClass A;
    return A;
}

如果您认为需要指针,请考虑使用智能指针。

如果你想要原始指针的刺激,此函数返回一个指向调用方的原始指针,并且调用方必须在完成后将其删除。

myClass * myFunction(){
    myClass * A = new myClass;
    return A;
}
myClass * thing = myFunction();
//stuff, that might throw an exception, so watch it
// smart pointers FTW
delete thing;

假设您的类型定义如下:

class myClass { /* ... */ };

您的示例不适合C++(除非您有一个 myClass* 转换构造函数,而您可能没有)。

您不必new位于自动内存上的对象:

myClass myFunction(){
  myClass a;
  return a;
}

动态内存上更新对象时,可以将其放入自动内存中的指针变量中:

myClass* myFunction(){
  myClass* a = new myClass;
  return a;
}

在这里,如果调用方未释放a,则可能会泄漏。

大概,除非你正在做一些有趣的运算符重载,否则你的意思是将新的myClass分配给指针并返回指针

myClass *myFunction(){
  myClass *A = new myClass;
 return A;
}

如果是这种情况,那么是的,您将不得不在某个时候删除它。此函数的调用方将保留指针并在适当时将其删除。

或者,您可以使用智能指针。

使用shared_ptr而不是原始指针。

std::shared_ptr<myClass> myFunction()
{
    std::shared_ptr<myClass> A = std::make_shared<myClass>(constructor parameters, if any);
    return A;
}
void f()
{
    std::shared_ptr<myClass> A = myFunction();
}

这将模拟 Java 风格的垃圾回收。