【发布时间】:2011-03-15 12:15:26
【问题描述】:
为什么当我的对象是包含虚函数的类的子对象时,我不能使用 malloc 为它们分配空间?这真是令人沮丧。有什么好的理由吗?
下面的程序说明了这个问题。它在第 27 行出现段错误,我在这里调用 aa->f()
#include <iostream>
#include <cstdlib>
class A
{
public:
virtual int f() {return 1;}
};
class B
{
public:
int f() {return 1;}
};
class Aa : public A {};
class Bb : public B {};
int main()
{
Aa* aa = (Aa*)malloc(sizeof(Aa));
Aa* aan = (Aa*)new Aa();
Bb* bb = (Bb*)malloc(sizeof(Bb));
std::cout << bb->f() << std::endl;
std::cout << aan->f() << std::endl;
std::cout << aa->f() << std::endl;
return 0;
}
版本信息:g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
【问题讨论】:
-
@Tomalak:如果可以的话,你应该投票关闭重复(我相信你可以使用 5k 代表)
-
答案很简单。
new是在 C++ 中创建新类实例的正确方法。malloc不是。 -
@David:这不是重复的。答案相同并不不意味着问题相同。
标签: c++ malloc virtual-functions