MST

星途 面试题库

面试题:C++中malloc和new在调用构造函数方面有何不同

在C++中,阐述malloc和new在创建对象时,对于对象构造函数调用的具体差异,并举例说明。
24.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 差异
    • malloc 只是分配内存,不会调用对象的构造函数。它是C语言的内存分配函数,在C++ 中仍然可用。其返回值是 void*,需要进行类型转换。
    • new 不仅分配内存,还会调用对象的构造函数来初始化对象。它是C++ 特有的操作符。
  2. 举例
#include <iostream>
#include <cstdlib>

class MyClass {
public:
    MyClass() {
        std::cout << "MyClass constructor called" << std::endl;
    }
    ~MyClass() {
        std::cout << "MyClass destructor called" << std::endl;
    }
};

int main() {
    // 使用malloc分配内存
    MyClass* ptr1 = (MyClass*)malloc(sizeof(MyClass));
    if (ptr1) {
        std::cout << "Memory allocated by malloc" << std::endl;
        // 这里没有调用构造函数,ptr1指向的内存中的对象处于未初始化状态
    }
    free(ptr1);

    // 使用new分配内存并调用构造函数
    MyClass* ptr2 = new MyClass();
    if (ptr2) {
        std::cout << "Memory allocated and constructor called by new" << std::endl;
    }
    delete ptr2;

    return 0;
}

在上述代码中,使用 malloc 分配内存后,对象未调用构造函数,而使用 new 分配内存时,对象的构造函数被调用。