为什么在malloc中不调用构造函数? 为什么在C++中使用 MalOC 和免费< /代码>时,不调用构造函数/析构函数,而当使用新< /COD>和Dele>代码>时,调用构造函数/析构函数?为什么会这样?

为什么在malloc中不调用构造函数? 为什么在C++中使用 MalOC 和免费< /代码>时,不调用构造函数/析构函数,而当使用新< /COD>和Dele>代码>时,调用构造函数/析构函数?为什么会这样?,c++,C++,malloc是一个C函数,它早于构造函数的日期free是一个C函数,它在析构函数的日期之前。它们都是C函数,必须在没有构造函数和析构函数的语言中运行。malloc和free都是纯粹的内存管理函数,它们对类一无所知(并且早在C++之前就存在了)。它们是低级内存操作 C++向C添加了类,并且作为该过程的一部分,添加了new和delete,以创建和销毁类的实例。这与低级内存管理不同。是什么让您想到应该在malloc中调用构造函数的?相关:malloc甚至如何知道调用哪个构造函数?但当我们使用mallo

malloc
是一个C函数,它早于构造函数的日期
free
是一个C函数,它在析构函数的日期之前。它们都是C函数,必须在没有构造函数和析构函数的语言中运行。

malloc
free
都是纯粹的内存管理函数,它们对类一无所知(并且早在C++之前就存在了)。它们是低级内存操作


C++向C添加了类,并且作为该过程的一部分,添加了
new
delete
,以创建和销毁类的实例。这与低级内存管理不同。

是什么让您想到应该在
malloc
中调用构造函数的?相关:
malloc
甚至如何知道调用哪个构造函数?但当我们使用malloc(用于类)时,会创建一个类的新对象,因此它必须执行类中的所有函数,包括构造函数和析构函数。@SarahIrfan:“当我们使用malloc(用于类)时,会创建一个类的新对象”不,不是。可以分配相应大小的内存,但尚未创建对象。@SarahIrfan否,未创建新对象。这就是重点。若要创建,必须调用它的构造函数。@SarahIrfan Not它“must”Not。它“必须”做标准中规定的malloc应该做的事情。@juanchopanza但是当我们创建一个指向类的指针,并将它指向所需大小的内存时,这不意味着我们实际上已经创建了该类的对象吗?malloc(sizeof(class_name))返回所分配内存的地址,但当我们将该内存分配给类的指针时,它应该意味着已经创建了一个对象。如何定义“创建一个对象”?如果一个对象没有像你说的那样创建,那么为什么这个代码可以工作:类测试{public:Test(){cout@SarahIrfan:因为非虚拟方法调用的机制允许编译器在不正确初始化对象的情况下正确解析方法地址。这并不意味着您应该依赖它,也不意味着它是正确的。底线:如果您想正确创建对象,请使用
new