在C++中删除像这样的对象时有什么问题吗?
MyCls* c = new MyCls();
void* p = (void*)c;
delete (MyCls*)p;
最佳答案
按照书面规定,这是合法的。
强制转换回MyCls*
是至关重要的。否则,您将调用未定义的行为-不会调用MyCls析构函数,并且也可能会出现其他问题(例如崩溃)。您必须转换回正确的类型。
还要注意,如果涉及多个继承并且使用多个强制类型转换,这可能会很复杂。您的类型转换必须在任一方向上“匹配”。
如果代码的结构使您在销毁时不知道类型,请为每个可删除对象提供一个带有虚拟析构函数的通用基类。然后在调用delete之前将其强制转换回基类。
关于c++ - 如何删除void指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24772699/