琴长不过时光 发表于 2020-4-7 11:50:43

小白求助 用指针new一个对象 的问题

为何objPlay()函数执行完了 没有调用析构函数 ?
Test* pT1 = new Test();明明调用的构造函数啊

BngThea 发表于 2020-4-7 13:28:45

因为定义的是指针,指针的生命周期不限于本函数内

编程鱼C 发表于 2020-4-7 13:38:27

?

4goodworld 发表于 2020-4-7 13:54:01

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
不应该是delete 的时候才发生作用吗?

sunrise085 发表于 2020-4-7 14:57:26

程序声明一个类的对象或者一个变量,都是在栈内存储的,栈内的对象或者变量都会在程序结束运行的时候进行出栈销毁,并释放空间。
对于类的对象的出栈销毁就是调用其析构函数。

然而使用new动态分配创建的类的对象或者变量都不在栈内存储,而在堆内存储,这一类的对象或者变量会在程序运行结束之后自动销毁释放空间,若想在程序内销毁,则需要在程序中使用delete进行销毁,
对于new生成的类的对象delete则会调用其析构函数,若没有在程序内delete,则程序运行过程中不会销毁该对象,也就不可能会调用析构函数。

琴长不过时光 发表于 2020-4-7 19:02:40

BngThea 发表于 2020-4-7 13:28
因为定义的是指针,指针的生命周期不限于本函数内

定义的是 指针的话 那delete为啥会调用析构函数 指针好像不是一个对象

BngThea 发表于 2020-4-7 19:05:09

琴长不过时光 发表于 2020-4-7 19:02
定义的是 指针的话 那delete为啥会调用析构函数 指针好像不是一个对象

指向类对象的指针,也是对象

琴长不过时光 发表于 2020-4-8 13:19:33

sunrise085 发表于 2020-4-7 14:57
程序声明一个类的对象或者一个变量,都是在栈内存储的,栈内的对象或者变量都会在程序结束运行的时候进行出 ...

谢谢大佬了
页: [1]
查看完整版本: 小白求助 用指针new一个对象 的问题