malloc和new的用法
作者:野牛程序员:2023-12-04 17:22:32 C++阅读 2748
malloc和new都是用于在程序运行时动态分配内存的工具,但它们在实现和用法上有一些区别。
malloc是C语言中的标准库函数,用于分配一块指定大小的内存空间。它的原型为:
void* malloc(size_t size);
malloc返回一个指向分配内存起始地址的指针,但是它并不执行任何构造函数。这意味着,如果使用malloc分配内存来存储类的对象,对象的构造函数不会被自动调用。因此,需要手动调用构造函数来初始化对象。
而在C++中,new是一个运算符,用于动态分配内存并调用对象的构造函数。new的语法如下:
Type* pointer = new Type;
这里Type是你要分配内存的类型。new会分配足够的内存空间,并调用Type的构造函数来初始化对象。与malloc不同,new返回的指针是类型安全的,即直接指向对象的类型。
在释放内存方面,malloc使用free函数,而new使用delete运算符。delete会调用对象的析构函数,然后释放内存。
总的来说,new是一个更高级的工具,它不仅分配内存,还负责调用构造函数进行对象的初始化。而malloc只是简单地分配内存,不涉及任何类型信息或构造函数的调用。
#include <iostream>
#include <cstdlib>
class MyClass {
public:
MyClass() {
std::cout << "Constructor called" << std::endl;
}
~MyClass() {
std::cout << "Destructor called" << std::endl;
}
};
int main() {
// Using malloc and free in C
MyClass* cObj1 = (MyClass*)malloc(sizeof(MyClass));
// Constructing object manually
new (cObj1) MyClass();
// Destructing object manually
cObj1->~MyClass();
// Freeing memory
free(cObj1);
// Using new and delete in C++
MyClass* cppObj1 = new MyClass();
// Memory is automatically freed when using delete
delete cppObj1;
return 0;
}野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:c++中静态函数和静态变量
- 下一篇:c++中switch 的参数类型不能是
