如果我像这样定义一个结构:
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/