什么是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)
答案 0 :(得分:6)
在C中,你没有new
;你有malloc()
;通过调用malloc()
获得释放内存,调用free()
。
那就是说,为什么在将(char*)
传递给delete
之前你会指向delete
?这几乎肯定是错的:传递给new
的指针必须与使用{{1}}创建的类型相同(或者,如果它具有类类型,则具有虚拟析构函数的基类)。
答案 1 :(得分:2)
简单地说'ol free()
。 C不区分数组和单个变量。
答案 2 :(得分:0)
相当于delete
和delete[]
的C只是free
?
答案 3 :(得分:0)
与非数组相同。
free(foo->bar)
答案 4 :(得分:0)
等价物是:
自由(foo->巴);
因为你将它类型转换为(char *),这意味着无论实际类型的'bar'是什么,都不会因为强制转换而调用析构函数。