【发布时间】:2018-11-23 08:42:15
【问题描述】:
假设我有一个指针void* p,然后在一些函数的传入和传出之后,假设p现在指向int。那我需要手动删除为delete static_cast<int*>(p)吗?
在大多数地方,人们会说delete 只有在有new 时才会发生。但在这种情况下,不是 C++ 本身记得释放那块内存吗?
【问题讨论】:
-
你只有
delete你new。永远成立!!具有自动记忆的东西将自动处理其记忆,而与您将其投射到的内容无关。 -
如果您不知道分配的来源,请检查文档中提供的任何内容。它可能会为您管理,并且可能需要您调用 API 函数来释放它。
-
并非所有 C++ 中的内存都必须释放,原始类型和对象都可能位于堆栈中的某个位置,或者位于全局数据部分中。拥有指向某物的指针并不意味着它需要被释放。
-
我担心这个问题会助长坏习惯。
void*在 C++ 中相当不寻常。让void*负责对象的生命周期几乎可以肯定是一个设计错误。 -
'假设我有一个指针 void* p' 在现代 c++ 中实际上不需要 void*;在 C 中做不可能的事情是一种 hack,但在所有现代 C++ 代码中,即使它与 C 交互,也不应该使用它们。你的假设被拒绝了;)