new和malloc的区别
时间: 2024-04-01 10:16:59 浏览: 115
new 和 malloc 都是用于动态分配内存的方法,但是它们有以下几个不同点:
1. 类型不同:new 是 C++ 中的运算符,malloc 是 C 语言中的函数。
2. 内存分配方式不同:new 不仅会分配内存,还会调用构造函数进行初始化操作,而 malloc 只是简单地分配内存,不会进行初始化。
3. 内存大小计算方式不同:new 操作符后面直接跟类型名,因此内存大小由编译器自动计算;而 malloc 函数需要手动计算内存大小并传入参数。
4. 返回值类型不同:new 返回的是对象指针,而 malloc 返回的是 void 类型的指针,需要强制类型转换后才能使用。
5. 异常处理方式不同:new 在分配内存失败时会抛出 std::bad_alloc 异常,而 malloc 在分配内存失败时返回 NULL。
综上所述,C++ 中建议使用 new 进行动态内存分配,因为它更符合面向对象的编程思想,并且可以自动调用构造函数进行初始化操作。但在某些特殊情况下,比如需要分配大量内存且不需要进行初始化操作时,可以使用 malloc 进行分配。
相关问题
c语言new和malloc区别
在 C 语言中,new 和 malloc 都是用于动态内存分配的函数,但是它们有着不同的用法和行为。
1. 语法不同:new 是 C++ 语言中的运算符,而 malloc 是 C 语言中的函数,所以在 C 语言中不能使用 new。
2. 分配内存的方式不同:new 在分配内存时会自动计算所需内存大小,并返回已分配内存的指针。而 malloc 需要显式地指定所需内存大小,并返回已分配内存的指针。
3. 初始化内存的方式不同:new 在分配内存时会自动调用相应类型的构造函数来初始化内存,而 malloc 只是简单地分配一段内存空间,不会进行初始化。
4. 返回值类型不同:new 返回的是对象类型的指针,而 malloc 返回的是 void 类型的指针。
5. 释放内存的方式不同:使用 new 分配的内存必须使用 delete 进行释放,而使用 malloc 分配的内存必须使用 free 进行释放。
总之,new 和 malloc 都可以用于动态内存分配,但是它们的使用方式和行为有所不同,需要根据具体情况进行选择。
详细描述new和malloc区别
new和malloc都可以动态地分配内存,但是它们的使用方式和一些细节有所不同。主要的区别如下:
1. new需要用对应的delete释放内存,而malloc需要用对应的free函数释放内存。
2. new会自动调用构造函数,而malloc不会。这意味着如果你使用new动态地分配一个类的对象时,会自动调用构造函数来初始化对象,而如果你使用malloc函数分配内存,则需要手动调用构造函数来完成初始化操作。
3. 使用new可以为类型操作符重载,而malloc不行。操作符重载是C++语言的一项重要功能,使得使用new更加灵活和方便。
4. new和delete是C++关键字,而malloc和free是C语言函数,因此如果你想用C++编写代码,应该使用new和delete。
阅读全文