如果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" << "xFDn";
}
};
int main(){
Circle *mCircle = (Circle *)malloc(sizeof(Circle));
mCircle->Radius();
mCircle->Display();
return 0;
}
有人能引用一个来源吗:在C++中,规则规定在调用构造函数之前不会创建对象
编译器将把对成员函数的调用转换为对静态函数的调用,其中隐含的this
参数指向对象。这意味着对象的内容,无论是有效的还是无效的,都与是否进行调用无关。
如果方法是虚拟的,则会发生这种情况,因为vtable指针必须有效。构造函数将初始化vtable指针。malloc
不调用构造函数,它甚至不知道什么是构造函数——这是C.的遗留行李
请注意,这不是标准指定的,而是通常的实现方式。
您可以访问已分配但未初始化的内存,但不能对内容做出有效的假设。成员函数独立于对象存在,它们只是在this
指向未初始化位置时调用的。