是否可以在C++中使用delete删除C POD?

Rel*_*lla 3 c++ types pod delete-operator data-structures

结构像

struct ifoo_version_42 {
   int x, y, z;
   char *imageData;
};
Run Code Online (Sandbox Code Playgroud)

在哪里imageData是这样的imageData = new char[50000];

我们可以执行以下操作:

template< typename T >
void del( T a ) // we promise to use this only on C Plain Old data structs=)
{
  delete a;
}
Run Code Online (Sandbox Code Playgroud)

在这个结构上,它是否足以清理记忆形式,如果?

Oli*_*rth 5

此功能模板也可以在非POD类型上"起作用".它与delete[] a;直接调用没有什么不同.

但是,这不会删除与之关联的内存imageData.这通常是你在析构函数中做的事情.


Ste*_*sop 5

删除结构并没有递归删除在它的任何指针,因此不会释放炭的阵列通过指向imageData.

我对你的使用也有点困惑delete[].您可以使用释放数组(已分配new[])delete[]或释放单个对象(已分配new)delete.你不能混合它们,也没有说你如何分配一个或多个实例ifoo_version_42.例如,以下内容具有未定义的行为:

ifoo_version_42 *x = new ifoo_version_42;
del(x);
Run Code Online (Sandbox Code Playgroud)

以下是好的:

ifoo_version_42 *x = new ifoo_version_42[1];
del(x);
Run Code Online (Sandbox Code Playgroud)

  • C++内存管理(或可能)主要是关于如何避免调用`new`.如果你不打电话给'new`,那么你不必担心谁会叫`delete`.`vector`的部分原因在于它提供了内存管理的数组,而用户无需显式释放任何内容,因此它专门用于此工作. (2认同)