【发布时间】:2015-05-22 23:50:59
【问题描述】:
如果 malloc 不创建新对象而只分配原始内存,为什么我可以通过指向该内存的指针访问类成员?
#include <iostream>
using namespace std;
const float PI = 3.141592654;
class Circle{
float radius;
public:
Circle(){
cout << "Constructor called";
}
~Circle(){
cout << "Destructor called";
}
void Radius(){
cout << "Enter radius: ";
cin >> radius;
}
float Area(){
return PI * radius * radius;
}
void Display(){
cout << "The circle with radius " << radius
<< " units has area = " << this->Area() << " unit" << "\xFD\n";
}
};
int main(){
Circle *mCircle = (Circle *)malloc(sizeof(Circle));
mCircle->Radius();
mCircle->Display();
return 0;
}
任何人都可以引用这个来源: 在 C++ 中,规则规定在调用构造函数之前不会创建对象。
【问题讨论】:
-
您使用
malloc()而不是new()有什么具体原因吗?不,malloc()没有正确设置你的类的实例。 -
malloc不调用构造函数。它不是 C++ 的一部分 -
在 C++ 常见问题解答中回答:isocpp.org/wiki/faq/freestore-mgmt#new-malloc-diff
-
不是特别的。我试图了解 malloc() 和 new 行为之间的确切区别。 malloc() 的局限性是什么?为什么 new 更好?
-
@EdHeal:
malloc函数是 C++ 语言的一部分。除了分配对象外,调用malloc还有其他目的;比如数据缓冲区。
标签: c++ class object malloc new-operator