c++ delete 派生类?该怎么处理
c++ delete 派生类?基类:class A{private:int a}派生类class B : public A{private:int b}int main(){
c++ delete 派生类?
基类:
class A
{
private:
int a;
};
派生类
class B : public A
{
private:
int b;
};
int main()
{
A *p = new B;
delete p;
return 0;
}
求解 delete p 时程序释放内存的过程?
[解决办法]
编译器先调用合成的B的析构函数,再调用A的析构函数了。
[解决办法]
#include <new>
struct foo {
};
foo *create() {
void *p = malloc(sizeof(foo));
new (p) foo;
return (foo*)p;
}
void destroy(foo *p) {
p->~foo();
free(p);
};
这就是分配和释放的过程。而且应该可以编译通过。如果foo有父类,且虚析构,由于虚构的特殊性,在foo的析构结束的时候,会自动调用父类的析构,这是跟普通虚函数不同的地方。
这段代码应该是所有为了避免传统委托式内存分配的基础,基本上都大同小异。