需要释放具有保留内存的 c++ Do 局部变量
c++ Do Local variables, with reserved memory, need to be freed?
我有一个简单的问题。我一直在寻找答案,但我可能没有找到正确的标签或单词来找到解决方案......
问题是,正如标题所说:局部变量(具有保留内存)是否需要释放?例如,我的意思是,如果我有以下功能:
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 风格的垃圾回收。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 如何使用 do while 循环确定最高值和最低值
- do while 循环中的 if 语句以 yes 或 no 结尾
- 以某种方式告诉编译器"Do not process line of code"
- 在 C 或 C++ 中,循环可以同时具有 "do" 和"while"部分吗?
- 使用 while 或 do while 退出循环
- 带有开关语句的 do-while 循环 -- 无穷循环错误
- 为什么当我输入一个被接受的数字时,我的 do-while 循环没有中断?
- 为什么我的 Do-while 循环无法在C++中运行菜单
- 如果语句不会在 do - while 循环中运行
- 开放CV垫"Sizes of input arguments do not match"的问题
- 为什么当我对数组使用增量操作时,do for 循环不起作用
- 如何在c++中读取do-while循环中的空白
- 什么是'do while loop'的真实应用?
- 将嵌套的 for 循环更改为 do-while 循环
- 如何修复不会在退出选择时终止的 do-while 循环
- 带有do函数的无限循环
- 为什么这个do-while循环每隔一个循环只写入数组?