C++动态内存分配探秘:new与malloc的关键差异及实例解析

 

概述:在C++中,new 和 malloc 均用于动态内存分配,但存在关键差异。new是C++运算符,能调用构造函数,返回类型明确;而malloc是C函数,仅分配内存,需手动类型转换。示例源代码生动演示了它们在构造函数调用和类型信息方面的不同。

在C++中,new 和 malloc 都用于动态内存分配,但它们之间有一些重要的区别。以下是对它们的详细描述,包括方法、步骤和相应的示例源代码。

new和malloc的区别:

1.使用方法:

  • new 是C++的运算符,能够调用对象的构造函数,返回类型明确。
  • malloc 是C语言的库函数,只分配内存块,返回void*,不会调用对象的构造函数。

2.类型信息:

  • new 知道所分配的类型,可直接使用。
  • malloc 返回void*,需要手动进行类型转换。

3.构造函数调用:

  • new 分配对象时会调用构造函数。
  • malloc 不调用任何构造函数。

示例源代码:

使用new:

#include <iostream>

class MyClass {
public:
    MyClass() {
        std::cout << "Constructor called." << std::endl;
    }
};

int main() {
    MyClass* obj = new MyClass(); // 使用 new 调用构造函数
    delete obj; // 使用 delete 释放内存
    return 0;
}

使用malloc:

#include <iostream>

class MyClass {
public:
    MyClass() {
        std::cout << "Constructor NOT called." << std::endl;
    }
};

int main() {
    MyClass* obj = (MyClass*)malloc(sizeof(MyClass)); // malloc 不调用构造函数
    free(obj); // 使用 free 释放内存
    return 0;
}

这两个示例清晰地展示了 new 和 malloc 在构造函数调用、类型信息等方面的区别。

 

posted @ 2024-02-23 07:43  架构师老卢  阅读(223)  评论(0编辑  收藏  举报