释放一个无效指针

Ana*_*and 0 c++ pointers void-pointers

如何释放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*参数,并且很可能不会调用对象的析构函数.

Lig*_*ica 9

你没有delete一个无效指针.为什么?因为:

'delete',应用于void*参数具有未定义的行为,并且很可能不会调用该对象的析构函数.

您的编译器如何知道指针对象具有哪种类型?那么哪个析构者要打电话?(虽然它可能决定要释放多少内存,具体取决于分配机制.)

不要存储void*- 使用"真实"指针类型.如果您需要"隐藏"真实类型,请考虑使用多态而不是过时的C实践.