📜  C++中的delete和free()(1)

📅  最后修改于: 2023-12-03 15:14:02.351000             🧑  作者: Mango

C++中的delete和free()

C++中delete和free()都是用来释放动态分配的内存的方法。但是它们有一些不同之处。

delete

delete是C++中用来释放动态分配的内存的运算符。它被用来释放new运算符动态分配的内存。使用方法如下所示:

int *ptr = new int;
delete ptr;

上面的代码会在堆中分配一个int的大小,将ptr指向该内存地址。delete ptr会释放该内存,并将ptr指向的地址设为无效。

删除一个已经被删除的指针是未定义的行为,这将导致程序的运行时错误。

free()

free()是C语言中用来释放动态分配内存的函数。它可以被用来释放使用malloc()或realloc()函数动态分配的内存。

使用方法如下所示:

int *ptr = (int*)malloc(sizeof(int));
free(ptr);

上面的代码会在堆中分配一个int的大小,将ptr指向该内存地址。free(ptr)将释放该内存,并将ptr指向的地址设为无效。

与delete不同,free()不会调用析构函数,因此如果我们需要释放带有析构函数的对象,则应该使用delete运算符。

此外,如果尝试删除在内存中分配的内存,则会导致未定义的行为。

总结

在使用动态内存分配时,我们需要小心地使用delete和free()。我们应该注意:

  • 不能多次删除同一个指针。
  • 不能删除已经删除的指针。
  • 不能使用delete来释放使用malloc函数分配的内存。
  • 不能使用free()释放使用new分配的内存。

正确使用动态内存分配,可以有效地避免内存泄漏和未定义的行为,使程序更加健壮和可靠。