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 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘