KWJ*_*104 20 c++ memory-management
我刚才有一个关于堆栈变量与堆变量如何工作的快速问题.据我了解,堆栈变量是函数返回后的变量,并且堆变量是持久的.但我真正感到困惑的是如何在函数内部分配堆变量:
int MyObject::addObject(const char* a){
MyObject newObject(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
说我有一个构造函数MyObject是newObject(const char * a).然后在这个函数调用它时,返回之后新构造的newObjectget被删除了吗?如果是,那么如何在函数内分配到堆呢?如果没有,你如何在以后清理你的记忆?
此外,析构函数的作用究竟是什么?何时被称为?
Luc*_*ore 16
一种类的构造函数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;
}
Run Code Online (Sandbox Code Playgroud)
你的代码:
MyObject newObject(a);
Run Code Online (Sandbox Code Playgroud)
创建一个自动存储(堆栈)MyObject调用newObject,直到它在结束时声明它的范围 - 即关闭}.
此外,析构函数的作用究竟是什么?何时被称为?
要清理内存,使用new或new[](或malloc)分配的类拥有.当对象超出自动对象的范围或显式调用delete动态对象时,它被调用.
| 归档时间: |
|
| 查看次数: |
10104 次 |
| 最近记录: |