我只是有一个关于堆栈变量与堆变量如何工作的快速问题。据我了解,堆栈变量是在函数返回后将被删除的变量,而堆变量是持久的。但是我真正困惑的是如何在函数内部分配堆变量:

int MyObject::addObject(const char* a){
    MyObject newObject(a);
    return 0;
}

假设我有一个MyObjectnewObject(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,直到结束声明它的作用域为止,即结束}



要清理内存,它必须拥有newnew[](或malloc)分配的类。当对象超出自动对象的范围时,或者为动态对象显式调用delete时,将调用该方法。

关于c++ - 堆栈vs堆C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8468210/

10-10 04:09