c++ - 结构对象析构函数

标签 c++ memory-management data-structures destructor heap-memory

如果我像这样定义一个结构:

struct info{
   std::string name;
}

并通过以下方式在堆上创建所述结构的新实例:

info* i = new info();

string 的析构函数是否在调用 info 上的 delete 时自动调用,以便释放名称对象的任何内部分配内存?在 C++ 中应该避免这种行为吗?

谢谢

最佳答案

是的,一旦为 info 调用了 delete,就会自动调用析构函数。但这并不意味着所有的内部存储器都将被释放。这里也有异常(exception)。

考虑一个案例

struct info
{
  char *name;
}

在主代码中

int main()
{
  info *n =  new info; 
  n->name = new char;

  delete n;
}

在这种情况下,name 的内存将不会被释放,您将发生内存泄漏。

关于c++ - 结构对象析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33608945/

相关文章:

c++ - 你如何在Windows中定义一 block 可执行内存?

c++ - 使用 GDB 进入模板类

iphone - Xcode 的 "build and analyze"报告此代码存在奇怪的内存泄漏

c++ - 从队列中删除第一个元素?

java - 如何为我的前缀匹配器算法找到更好的算法

c++ - 在C++中采用输入行并将行中的单词添加到 vector 的最佳方法是什么?

c++ - 如何让所有输入都在同一行 C++

c# - 使用 C# 和 C++ 非托管时的内存分配/解除分配

c - 我如何确定我已经释放了所有在 C 中分配的内存?

具有给定集合的集合集合中最大集合交集的算法/数据结构