c++ - 如何删除空指针?

标签 c++ pointers void delete-operator

在 C++ 中删除这样的对象有什么问题吗?

MyCls* c = new MyCls();
void* p = (void*)c;
delete (MyCls*)p;

最佳答案

这是合法的。

转换回 MyCls* 很关键。否则,您将调用未定义的行为——MyCls 析构函数将不会被调用,并且还可能出现其他问题(例如崩溃)。您必须转换回正确的类型。

还要注意,如果涉及多重继承并使用多重转换,这可能会很复杂。您的类型转换必须在任一方向“匹配”。

如果您的代码结构使得您在销毁时不知道类型,请为每个可删除对象提供一个带有虚拟析构函数的公共(public)基类。然后在调用 delete 之前转换回基类。

关于c++ - 如何删除空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24772699/

相关文章:

c++ - 将 void * 指向 char 作为 int 读取有多安全?

C++ typeid.name() 只返回 char "c"

c++ - 在 CMake 中包含 Visual Studio 解决方案

c - 使用指针的函数调用

C++ “add explicit braces to avoid dangling else”

c++ - 如何在 C++ 中初始化指向结构的指针?

python - 使用 ctypes 将指针传递给 dll 函数

c - 这到底是做什么的? [*(字符*)p1]

c++ - 在 C++ 类定义中包含 Objective C++ 类型

c++ - 水平撕裂 DirectX9