📅  最后修改于: 2023-12-03 15:29:53.816000             🧑  作者: Mango
C++中有两种方法来动态分配内存:new
操作符和malloc()
函数。同样,释放内存也有两种方法:delete
操作符和free()
函数。这两种方法在使用时都有一些细微但很重要的差别。
new
和 delete
使用new
操作符可以动态分配内存,语法如下:
new type;
例如:
int* p = new int;
以上代码分配了一个整数的空间,并将返回的指针分配给p
。new
操作符分配的内存大小是在运行时计算的。
使用delete
操作符可以动态释放内存,语法如下:
delete ptr;
例如:
int* p = new int;
// ...
delete p;
这将释放p
所指的整数所占用的空间。
new
操作符分配内存时需要注意,如果无法分配所需的内存,将抛出std::bad_alloc
的异常。而使用malloc()
函数则不会抛出异常。new
操作符分配动态内存时,如果指针指向的是一个对象,那么调用delete
时会自动调用对象的析构函数。而使用malloc()
函数分配内存时,则需要手动调用对象的析构函数。delete
操作符时,指针是空指针,那么什么也不会发生。但如果使用free()
函数时,指针是空指针,则程序将崩溃。new
操作符分配内存后使用free()
函数释放内存,也不要在使用malloc()
函数分配内存后使用delete
操作符释放内存。这样做会导致程序行为未定义。malloc()
和 free()
使用malloc()
函数可以动态分配内存,语法如下:
malloc(size_t size);
例如:
int* p = (int*)malloc(sizeof(int));
以上代码分配了一个整数的空间,并将返回的指针分配给p
。malloc()
函数分配的内存大小是在编译时计算的。
使用free()
函数可以动态释放内存,语法如下:
free(ptr);
例如:
int* p = (int*)malloc(sizeof(int));
// ...
free(p);
这将释放p
所指的整数所占用的空间。
free()
函数释放内存时,指针必须是指向使用malloc()
或calloc()
函数所返回的指针。否则程序将行为未定义。malloc()
函数分配内存后使用delete
操作符释放内存,也不要在使用new
操作符分配内存后使用free()
函数释放内存。这样做会导致程序行为未定义。在C++中,new
操作符和delete
操作符用于动态分配和释放内存。malloc()
函数和free()
函数也可以用于动态分配和释放内存。但需要注意的是,这两种方法在使用时都有一些细微但很重要的差别。在使用时,需要根据需求选择合适的方法,以免出现意料之外的行为。