C等价的C ++ delete [](char *)

时间:2010-06-03 14:44:45

标签: c++ c free delete-operator

什么是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)

5 个答案:

答案 0 :(得分:6)

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

那就是说,为什么在将(char*)传递给delete之前你会指向delete?这几乎肯定是错的:传递给new的指针必须与使用{{1}}创建的类型相同(或者,如果它具有类类型,则具有虚拟析构函数的基类)。

答案 1 :(得分:2)

简单地说'ol free()。 C不区分数组和单个变量。

答案 2 :(得分:0)

相当于deletedelete[]的C只是free

答案 3 :(得分:0)

与非数组相同。

free(foo->bar)

答案 4 :(得分:0)

等价物是:

自由(foo->巴);

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