【发布时间】:2012-12-17 06:13:06
【问题描述】:
我有一个关于在 C++ 中释放内存的问题:
typedef struct type1
{
int a;
int b;
float c;
} Type1;
typedef struct type2
{
int a;
int b;
} Type2;
void *p = new Type1;
delete (Type2 *)p;
在这种情况下,p 指向的内存区域在p 被转换为不同大小的类型后是否会被完全删除?
【问题讨论】:
-
@Johnsyweb
base没有虚拟析构函数,所以这仍然是未定义的行为 -
为什么不引入一个带有
virtualdtorstruct base { int a; int b; virtual ~base() { } }; struct Type1: public base { float c; }; struct Type2: public base { }; base* p = new Type1; delete p;的通用基类? -
@Johnsyweb:如果您想使用继承,如果 Type1(由属性
c扩展)派生自Type2会更容易。就像 Praetorian 已经指出的那样,Type2(基本类型)应该有虚拟析构函数。 -
@Liho:这可能更容易,但给出的示例通常与现实世界的案例相比大大减少。我现在已经包含了
virtual ~base() { }。