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