【问题标题】:how to know if there is destructor of a class如何知道是否有一个类的析构函数
【发布时间】:2015-06-16 08:02:41
【问题描述】:

我需要重载 new[]/delete[] 来维护内存资源。 但我发现 new[] 将为带有析构函数的类分配 4 个字节(int)。 所以问题是: 如何知道 new[] 是否为 classes 数组分配 4 个字节以正确释放内存?

【问题讨论】:

  • 只需在您分配的类型上调用 sizeof(...) 即可。
  • 请注意这个词是destructor不是解构函数
  • 你应该解释为什么你需要准确地重载 new/delte。
  • 我怀疑您看到了由 virtual 析构函数引起的 vtable 指针的效果。或者,您可能会看到 delete[] 需要的对象数。

标签: c++


【解决方案1】:

由于new 将为您的Type 类类型分配sizeof(Type) 字节,因此您可以只使用它而不是硬编码一个值。

【讨论】:

  • 这不包括数组大小。 new T[N] 可能会占用N*sizeof(T) + sizeof(size_t)
【解决方案2】:

我在 delete[] 中发现了一个不释放的方法,因为编译器为非简单类型添加了一个 int,只需调用 delete 并让它处理这种情况。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多