删除C++中的函数

Day*_*mer 6 c++ arrays delete-operator

我看到了一个使用函数的例子:在cpp中删除,我并没有完全理解它.代码是:

class Name {
    const char* s;
    //...
};

class Table {
      Name* p;
      size_t sz;
public:
      Table(size_t s = 15){p = new Name[sz = s]; }
      ~Table { delete[] p; }
};
Run Code Online (Sandbox Code Playgroud)

什么是命令的具体行动:delete[] p;

我认为目的是删除容器表中的所有指针.

括号中delete[]给出了一个线索,它删除了一个指向Name的指针数组,但没有指定数组的大小,那么析构函数如何"知道"要删除多少指针?

CB *_*ley 13

delete 它不是一个功能,它是一个操作员.

delete使用表达[]与创建对象破阵new ... []并释放相关的存储器.delete[]必须用于返回的指针new ... []; 非数组delete仅在非数组返回的指针上new.使用不匹配的delete表单总是不正确的.

delete表达~Table()(缺少()在代码)会破坏动态创建的阵列Name对象确保Name析构函数被称为该数组的每个成员.

实现一些机制来实现一些机制,记录分配new ... []给程序员的数组中的元素数量,不必担心这一点.

在许多实现中,在数组元素具有非平凡的析构函数的情况下,new[]表达式将分配额外的空间以在所有数组成员的空间之前记录元素计数.然后在delete[]用于确保调用正确数量的析构函数时查找此隐藏计数.这只是一个实现细节,但其他实现也是可能的.

  • @Day_Dreamer:另一种思考它的方法是作为许多对象的单个数组.`new Name [sz]`分配一个数组(由许多对象组成)`delete []`释放一个数组(许多对象).数组的每个成员在销毁时都会被销毁. (2认同)