【发布时间】:2010-03-28 22:27:44
【问题描述】:
是编译器错误还是运行时错误?下面的代码可以编译!
class Base{
void g();
void h();
};
int main()
{
Base* p = new Base();
free(p);
return 0;
}
但是如果我这样声明类 Base 就不能用虚函数编译
class Base{
virtual void g();
void h();
};
无论函数是不是虚函数,下面的代码都可以一直编译。
class Base{
void g();
void h();
};
int main()
{
Base* p = (Base*)malloc(sizeof(Base));
delete p;
return 0;
}
【问题讨论】:
-
结果是程序没有定义的行为。
-
@avakar,为什么不将其发布为答案?
-
@Poita - 显然他希望 me 获得分数 ;-)
-
您还应该使用 reinterpret_cast 而不是您使用的 c 样式转换。
标签: c++ memory-management malloc new-operator