Pfeffer 2019-12-16 05:24 采纳率: 50%
浏览 193
已采纳

关于析构函数和C++内存的问题

#include<stdlib.h>

class Student
{

private:

    int id;
    char *name;
public:

    Student();
    ~Student();

};

Student::Student(){
    this->id = 1234;
    char* name = "leon";
    this-> name = name;
};


int main(){

Student leon;

return 0;
}

在C++ 中,初始化一个对象,其实就是在根据这个对象内定义的成员变量的类型预定了一批空间,为什么不需要析构函数中写一些
命令,从而去除这个预定呢?

  • 写回答

3条回答 默认 最新

  • lionboybaby 2019-12-17 14:49
    关注

    一个C++程序所涉及到的内存区域,一般分为,栈区,堆区,全局区和常量区。
    栈区空间,由系统分配和回收,程序代码无需管理,但要防止栈空间过度分配导致栈溢出。
    堆区空间,一般是由程序员分配释放,若程序员不释放的话,进程结束时可能由操作系统回收,但如果进程在运行中无释放,导致内存耗尽的话,进程会被终止。
    全局空间,也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻的另一块区域,程序结束后由系统释放。
    常量空间,常量字符串就是放在这里,程序结束后由系统释放。

    在程序中,对变量初始化时,一般只有调用new 或 mollac操作的时候,会在堆上分配内存空间,否则都是在栈区或全局区分配空间。因此只要类中的成员变量的初始化都未调用new 或 mollac操作,就没必通过析构函数释放内存。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog