类C1继承C0,C1所需空间大于C0;C1 *p=new C1; delete (C0*)p是不是不会完全释放new申请的内存?
望大虾们指点!
5 个解决方案
#1
C0的析构函数是虚函数的话就会正确析构
#2
语法上会泄漏,但最终还要看编译器的
#3
用_crtdebug
会报错么、?
会报错么、?
#4
有道理
#5
内存块分配是另外一套机制,按照地址和大小记录的,和类无关,按照不同的类delete,对象“本身”所占的内存块也一定会完全释放的。
会出问题的是,类的成员,比如有CString成员,没有调用正确的析构函数的话,CString里面分配的内存就无法释放,或者按照错误的方式析构成员会引起异常。
针对你的情况,把析构函数定义成虚函数就行了。
会出问题的是,类的成员,比如有CString成员,没有调用正确的析构函数的话,CString里面分配的内存就无法释放,或者按照错误的方式析构成员会引起异常。
针对你的情况,把析构函数定义成虚函数就行了。
#1
C0的析构函数是虚函数的话就会正确析构
#2
语法上会泄漏,但最终还要看编译器的
#3
用_crtdebug
会报错么、?
会报错么、?
#4
有道理
#5
内存块分配是另外一套机制,按照地址和大小记录的,和类无关,按照不同的类delete,对象“本身”所占的内存块也一定会完全释放的。
会出问题的是,类的成员,比如有CString成员,没有调用正确的析构函数的话,CString里面分配的内存就无法释放,或者按照错误的方式析构成员会引起异常。
针对你的情况,把析构函数定义成虚函数就行了。
会出问题的是,类的成员,比如有CString成员,没有调用正确的析构函数的话,CString里面分配的内存就无法释放,或者按照错误的方式析构成员会引起异常。
针对你的情况,把析构函数定义成虚函数就行了。