return a.exec不会退出的话那就出大事了,他不退出怎么结束应用程序?其实在windows下,当程序收到quit消息时,主消息循环就会退出。就是你的a.exec就返回了。main返回之后的事就交给crt运行时库了,他要做的事其中之一就是对象的释放,就是你的cc对象k会释放,之后调用你的cc析构函数。之于你说的cc *k = new cc不会出错,而cc k会出错。这是c++里内存分布的原因。前者是在堆里面分配空间,需要自己释放;后者是在栈里面分配内存,有系统自己释放。so,new cc 你不显示调用delete 他是不会释放的,也就不会调用析构函数。而 cc k会在该变量的生存期结束之后自动释放。调用其析构函数。看着很简单的问题,其实涉及的细节很多。说了个大概。有问题再交流