c++ 我是否需要手动删除一个指向另一个具体类型的 void* 指针?

标签 c++ c++11 pointers

假设我有一个指针 void* p ,然后在一些函数的传入和传出之后,假设 p 现在指向 int .那我需要手动删除as delete static_cast<int*>(p)吗? ?

在大多数地方人们说delete只有当存在 new 时才会发生.但在这种情况下,不是,而是 C++ 本身是否记得释放该内存?

最佳答案

这完全取决于您指向的 int 是如何分配的,您只能删除的内容。


正确(int新的):

int* a = new int;
void* p = a;

//somewhere later...

delete static_cast<int*>(p);

不好(int 是自动管理的):

int a = 0;
void* p = &a;

//somewhere later...

delete static_cast<int*>(p);

回答评论代码,做:

int* a = new int; 
void* p = a; 

delete p;

从不好吗。你不应该通过 void*delete,这是未定义的行为。


旁注:在现代 C++ 中,您真的不应该使用 newdelete,坚持使用智能指针或标准容器。

关于c++ 我是否需要手动删除一个指向另一个具体类型的 void* 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50842770/

相关文章:

c++ - 运行 MEX 文件时 MATLAB 崩溃

c++ - 从 C++ QStateMachine 控制 QML UI

c++ - 打开带有临时端口的 Boost.Asio UDP 套接字

c++ - 分配具有相同值的多维 std::array 的简单方法?

c++ - 有序和无序映射

c# - 在 C# 中使用数组的第一步

c++ - 为什么 x86-64 C/C++ 编译器没有为此代码生成更高效的汇编?

c++ - 自动和复制构造函数 : what's wrong?

c - 两个指针指向相同的内存地址,如果这两个指针的释放发生在独立的地方,如何避免内存泄漏?

c - 为什么 malloc-ed 数组和非 malloced 数组的大小不同?