我有一个简单的问题。我一直在寻找答案,但我可能找不到正确的标签或单词来找到解决方案......
问题是,正如标题所说:是否需要释放局部变量(保留内存)?我的意思是,例如,如果我有以下功能:
myClass* myFunction(){
myClass* A = new myClass;
return A;
}
如果“是”,我应该在哪里调用“删除”?“回归”前后都是废话……
我对吗?
我有一个简单的问题。我一直在寻找答案,但我可能找不到正确的标签或单词来找到解决方案......
问题是,正如标题所说:是否需要释放局部变量(保留内存)?我的意思是,例如,如果我有以下功能:
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
如果调用者没有释放它,可能会泄漏。
据推测,除非您正在进行一些有趣的运算符重载,否则您的意思是将 new 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 风格的垃圾收集。