首页 > 解决方案 > 如果`new int`返回一个`int*`,那么为什么`new int[n]`不返回一个`int**`呢?

问题描述

我很困惑如何同时new int返回new int[n]一个int*. 为什么后者不返回一个int**

以下是一些上下文:请参阅data下面来自 Goodrich、Tamassia 和 Mount 的第二版的片段中的变量。C++教科书中的数据结构和算法:

class Vect {
   public:
      Vect(int n);
       ~Vect();
      // ... other public members omitted
   private:
      int* data;
      int size;
};
    
Vect::Vect(int n) {
    size = n;
    data = new int[n];
}
    
Vect::~Vect() {
    delete [] data;
}

标签: c++pointersmemory-managementheap-memoryfree

解决方案


(为了解释,答案包含简化)

int**如果我没记错的话,在 C 中,指向 int 数组的指针将是 type 。

你误会了。在 C 中它也将是int*.

当您声明:int foo[] = { 1, 2, 3 }时,数组 ( foo) 的名称可以被视为指向其第一个元素 ( 1) 的指针。指向的指针intint*

此外,为什么我们调用delete[]而不是delete, 来删除int*(数据)?

delete删除单个对象。delete []删除动态数组。


推荐阅读