我只是有一个关于堆栈变量与堆变量如何工作的快速问题。据我了解,堆栈变量是在函数返回后将被删除的变量,而堆变量是持久的。但是我真正困惑的是如何在函数内部分配堆变量:
int MyObject::addObject(const char* a){
MyObject newObject(a);
return 0;
}
假设我有一个
MyObject
的newObject(const char * a)
构造函数。然后在此函数中调用它时,返回后新构造的newObject
是否会被删除?如果是,那么如何在函数内分配给堆?如果没有,您以后如何清理内存?此外,析构函数的确切作用是什么?何时调用它?
最佳答案
类MyObject
的构造函数是MyObject()
,而不是newObject()
。在您的示例中,newObject
是变量的名称,而不是构造函数。
要在函数内部的堆上分配,您需要调用new
运算符:
int MyObject::addObject(const char* a){
MyObject* newObject = new MyObject(a);
//newObject is allocated on the heap
//... Some more code...
delete newObject;
//you have to explicitly delete heap-allocated variables
//if not, you get memory leaks
return 0;
}
您的代码:
MyObject newObject(a);
创建一个称为
MyObject
的自动存储(堆栈)newObject
,直到结束声明它的作用域为止,即结束}
。要清理内存,它必须拥有
new
或new[]
(或malloc
)分配的类。当对象超出自动对象的范围时,或者为动态对象显式调用delete
时,将调用该方法。关于c++ - 堆栈vs堆C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8468210/