爲什麼不能我使用malloc爲我的對象分配空間時,他們是包含虛擬函數的類的孩子嗎?這真令人沮喪。有沒有很好的理由?
下面的程序說明了這個問題。它出現segfaults第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
解決方案在這裏:http://stackoverflow.com/questions/4904762/c-why-is-new-needed/4904873#4904873 – 2011-03-15 12:18:21
@Tomalak:你應該投票結束,如果你可以重複(我相信與5k代表你被允許) – 2011-03-15 12:22:47
答案很簡單。 'new'是在C++中創建類的新實例的正確方法。 'malloc'不是。 – 2011-03-15 13:15:15