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条)

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向