删除类对象的数组?

时间:2011-05-11 06:08:52

标签: c++ memory-management new-operator

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

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

我认为即使是用户定义的类也可以:

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

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

  3. 基本上,我一直在使用这种语法,但从来没有理解内部发生了什么,现在我很好奇。

1 个答案:

答案 0 :(得分:7)

  1. 否。内存分配器无形地跟踪大小。在编译时无法确定大小,因为那时分配不会是真正动态的,以下内容不起作用:
  2. size_t n;
    std::cin >> n;
    a = new int[n];
    // do something interesting
    delete[] a;
    
    1. 是。为了说服自己,请尝试
    2. struct Foo {
          ~Foo() { std::cout << "Goodbye, cruel world.\n"; }
      };
      
      // in main
      size_t n;
      std::cin >> n;
      Foo *a = new Foo[n];
      delete[] a;