C++ malloc是否创建该类的新实例?

C++ malloc是否创建该类的新实例?,c++,class,object,malloc,new-operator,C++,Class,Object,Malloc,New Operator,如果malloc不创建新对象,而只分配原始内存,为什么我能够通过指向该内存的指针访问类成员 #include <iostream> using namespace std; const float PI = 3.141592654; class Circle{ float radius; public: Circle(){ cout << "Constructor called"; } ~Circle(){

如果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;
}
#包括
使用名称空间std;
常数浮点PI=3.141592654;
班级圈子{
浮动半径;
公众:
圈(){

cout您可以访问已分配但未初始化的内存,但无法对内容做出有效的假设。成员函数独立于对象存在,它们仅通过指向未初始化位置的
调用。

编译器将把对成员函数的调用转换为对静态函数的调用,带有一个隐含的
参数指向对象。这意味着对象的内容(有效或无效)与是否进行调用无关


如果该方法是虚拟的,则会发生变化,因为vtable指针必须有效。构造函数将初始化vtable指针。
malloc
不调用构造函数,它甚至不知道构造函数是什么-它是C的遗留行李


请注意,这不是标准中规定的,而是通常的实现方式。

使用
malloc()
而不是
new()
,有什么具体原因吗?没有,
malloc()不会正确设置类的实例。<代码> Malc C/代码>不调用构造函数。它不是C++中FAQ回答的C++的一部分:不是特别。我试图理解MalCube()和NeLoad行为之间的精确区别。EdCule:EdCule:函数“代码> MalOC 是C++语言的一部分。除了对象的分配之外,还有调用对象<代码> MalOC 的目的,例如数据缓冲区。成员数据是什么?当创建新对象时,每个对象的数据都是创建的,对吗?为什么,在上面的代码中,我能够访问RA吗?dius,当它还没有被创建时?(或者它有吗?)@数据的存储已经创建,因此可以访问。但是,该存储的内容可以完全未初始化,因此不知道会返回什么。这是否意味着引用非静态数据成员也会被转换为静态数据成员?@1587;不,数据成员是按对象保留的。只有e方法-不需要为每个对象复制代码。没错!如果malloc不实例化一个新对象,当我尝试使用malloc创建多个对象或类中的一个对象数组时会发生什么?如果真的没有创建新对象,我将无法单独访问每个对象的数据。但是我可以创建一个对象有两个部分-为它分配内存空间,并通过构造函数初始化它。
malloc
可以为一个对象分配存储空间,但它不能初始化对象。了解区别很重要。我仍然不清楚。为什么要“初始化”是创建对象的一部分吗?假设我创建了一个具有成员长度的类框。如果类中只有一个构造函数,并且我没有在该构造函数中初始化长度,那么当我说
Box b1;
b1具有未初始化的半径时,仍然会“创建”一个对象,但对象b1已经创建。