假设我有以下代码:
void* my_alloc (size_t size)
{
return new char [size];
}
void my_free (void* ptr)
{
delete [] ptr;
}
Run Code Online (Sandbox Code Playgroud)
这样安全吗?或者必须在删除前ptr进行投射char*?
我正在尝试将C++类(例如class foo)与C 接口.到目前为止,我所做的是定义一个C结构,它包含一个不透明的指针成员变量(即void*),指向相关的C++ foo对象.
struct C_foo {
void *foo_obj;
};
Run Code Online (Sandbox Code Playgroud)
我定义了一个alloc()C接口函数来分配类型的对象C_foo:
struct C_foo* alloc(/* input */) {
struct C_foo *out = new struct C_foo;
out->foo_obj = new foo(/* input */);
return out;
};
Run Code Online (Sandbox Code Playgroud)
我现在要做的是创建一个dealloc()C接口函数,该函数将正确释放C_foo先前分配的类型的对象,如上alloc()所示:
void dealloc(struct C_foo *obj) {
/* ??? */
}
Run Code Online (Sandbox Code Playgroud)
我知道显式删除void*指针(即delete obj->foo_obj;)会导致未定义的行为(§5.3.5/ 1 [expr.delete]):
该
delete-expression的结果的类型为void[81].[81]这意味着无法使用类型指针删除对象, 因为它不是对象类型.
void*void
如何释放void指针.
struct vStruct {
void *vPtr;
struct vStruct *next;
};
struct vStruct sObj;
struct vStruct *sObjNew = sObj;
delete sObjNew->vPtr; -----------> Is this correct way to delete void pointer
delete sObjNew;
Run Code Online (Sandbox Code Playgroud)
显示错误运算符'delete',应用于具有未定义行为的void*参数,并且很可能不会调用对象的析构函数.