如果我使用free或者使用malloc删除会有什么结果?

sky*_*oor 4 c++ malloc memory-management new-operator

这是编译器错误还是运行时错误?下面的代码可以编译!

class Base{
void g();
void h();
};

int main()
{
    Base* p = new Base();
    free(p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我像这样声明类Base,则无法使用虚函数进行编译

class Base{
virtual void g();
void h();
};
Run Code Online (Sandbox Code Playgroud)

无论函数是否为虚函数,下面的代码都可以一直编译.

class Base{
void g();
void h();
};

int main()
{
    Base* p = (Base*)malloc(sizeof(Base));
    delete p;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*kis 11

未定义的结果,加上malloc()不调用构造函数,free()不调用析构函数.