假设我有一个指针 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++ 中,您真的不应该使用 new
或 delete
,坚持使用智能指针或标准容器。
关于c++ 我是否需要手动删除一个指向另一个具体类型的 void* 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50842770/