1

C++ 的 C 等价物是什么

delete[] (char *) foo->bar;

编辑:我正在将一些 C++ 代码转换为 ANSI C。它有:

typedef struct keyvalue
{
  char *key;
  void *value;
  struct keyvalue *next;
} keyvalue_rec;

// ...

  for (
    ptr = this->_properties->next, last = this->_properties;
    ptr!=NULL;
    last = ptr, ptr = ptr->next)
  {
    delete[] last->key;
    delete[] (char *) last->value;
    delete last;
  }

这对C 有用吗?

free(last->key);
free(last->value);
free(last)
4

5 回答 5

6

在 C 中,你没有new; 你只有malloc();释放通过调用malloc(),获得的内存free()

就是说,为什么要在将指针传递给(char*)之前将其投射到delete?这几乎肯定是错误的:传递给的指针delete必须与创建时的类型相同new(或者,如果它具有类类型,则属于具有虚拟析构函数的基类)。

于 2010-06-03T14:46:17.430 回答
2

只是简单的'ol free()。C 不区分数组和单个变量。

于 2010-06-03T14:46:39.400 回答
0

C 等价于deleteanddelete[]只是free?

于 2010-06-03T14:46:17.920 回答
0

与非数组相同。

free(foo->bar)
于 2010-06-03T14:47:11.113 回答
0

相当于:

自由(富->酒吧);

因为您将其类型转换为 (char *) 这意味着无论“bar”的实际类型是什么,都不会因为转换而调用析构函数。

于 2010-06-03T14:48:34.937 回答