gpt4 book ai didi

c++ - 删除类对象数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:04 24 4
gpt4 key购买 nike

下面的代码正确释放了 100 个整数的内存,这几乎是常识。

int* ip = new int[100];
delete [] ip;

而且我认为即使对于用户定义的类它也能工作:

Node* ip = new Node[100];
delete [] ip;
  1. 在第一种情况下,要释放的内存大小(400 字节)是在编译时确定的吗?基本上,内部发生了什么?

  2. 在第二种情况下,Node 的析构函数是否会在 100 个对象中的每一个上被调用?

本质上,我一直在使用这种语法,但一直不明白内部发生了什么,现在我很好奇。

最佳答案

  1. 没有。内存分配器无形地跟踪大小。大小无法在编译时确定,因为那样分配就不是真正动态的,以下将不起作用:

size_t n;
std::cin >> n;
a = new int[n];
// do something interesting
delete[] a;
  1. 是的。要让自己相信这个事实,请尝试

struct Foo {
~Foo() { std::cout << "Goodbye, cruel world.\n"; }
};

// in main
size_t n;
std::cin >> n;
Foo *a = new Foo[n];
delete[] a;

关于c++ - 删除类对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5959978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com