小白求助 用指针new一个对象 的问题
为何objPlay()函数执行完了 没有调用析构函数 ?Test* pT1 = new Test();明明调用的构造函数啊 因为定义的是指针,指针的生命周期不限于本函数内 ? 类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
不应该是delete 的时候才发生作用吗? 程序声明一个类的对象或者一个变量,都是在栈内存储的,栈内的对象或者变量都会在程序结束运行的时候进行出栈销毁,并释放空间。
对于类的对象的出栈销毁就是调用其析构函数。
然而使用new动态分配创建的类的对象或者变量都不在栈内存储,而在堆内存储,这一类的对象或者变量会在程序运行结束之后自动销毁释放空间,若想在程序内销毁,则需要在程序中使用delete进行销毁,
对于new生成的类的对象delete则会调用其析构函数,若没有在程序内delete,则程序运行过程中不会销毁该对象,也就不可能会调用析构函数。 BngThea 发表于 2020-4-7 13:28
因为定义的是指针,指针的生命周期不限于本函数内
定义的是 指针的话 那delete为啥会调用析构函数 指针好像不是一个对象 琴长不过时光 发表于 2020-4-7 19:02
定义的是 指针的话 那delete为啥会调用析构函数 指针好像不是一个对象
指向类对象的指针,也是对象 sunrise085 发表于 2020-4-7 14:57
程序声明一个类的对象或者一个变量,都是在栈内存储的,栈内的对象或者变量都会在程序结束运行的时候进行出 ...
谢谢大佬了
页:
[1]