【问题标题】:When is it important to use the delete operator?什么时候使用删除运算符很重要?
【发布时间】:2021-05-05 19:57:22
【问题描述】:

所以我知道内存管理在 c++ 中很重要,但通常,垃圾收集在我的 c++ 程序中会被忽略。 我知道在某些重要的情况下您想使用删除运算符,这样您就不会遇到内存泄漏,但我不确定它们是什么。

【问题讨论】:

  • 什么垃圾回收?
  • 标准 c++ 没有垃圾回收。请记住,c++ 标记用于标准/非托管 c++ 而不是 .net / clr。如果您使用的是 .NET,您可能需要删除 c++ 并添加 c++-cli
  • 永远不要使用new,也不需要使用delete。而是使用std::vector 之类的容器和std::unique_ptr 之类的智能指针。
  • 简化规则:你new,你必须delete。你new[],你必须delete[]。工作量很大,所以从使用标准库中的容器开始吧。
  • 现代c++ 鼓励您避免使用新的。而是使用标准库的容器,当你不能使用智能指针时。

标签: c++ memory memory-leaks


【解决方案1】:

当您使用new 运算符时,内存分配在堆上。为了释放该内存,请致电delete。例如,对于一个 int:

int * p_myint = new int;
delete p_myint;

或者对于用户定义类的对象:

MyClass * p_myobject = new MyClass;
delete p_myobject;

一般来说,每次使用new 都需要使用delete

请注意,要为数组(和一些相关类型)分配内存,请使用 new[],而分配的内存同样由 delete[] 释放。例如:

int * p_myints = new int[3];
delete[] p_myints;

同样,每次使用new[] 通常都需要使用delete[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2017-10-20
    • 2016-11-27
    • 2012-10-03
    相关资源
    最近更新 更多