-1

我正在研究一个代表托管数组的模板类。

E (*data)[];

数据是我的数组。

data = new E[size];

而这,它不喜欢。它把我扔了;

无法在分配中将 Component* 转换为 Component (*)[] 给出了什么?

即使我没有将指针类型传递给我的模板类型,任何人也可以解释为什么 E 用 * 表示?

4

2 回答 2

3
E (*data)[];

data是指向 E 数组的指针,而不是指向 E 的指针(不要与指向 E 的指针数组混淆)。有一个非常明显的区别。

编辑:为了帮助您理解...

new正在向您返回一个指向 的指针E,但您已将其声明data指向E数组的指针。数组是 C 中的一种类型!它不仅仅是变相的指针。在某些情况下,数组可能会衰减为指针,但不会双向。

编辑2:

根据您的评论:

我的印象是我正在创建一个新的 E 指针数组?

访问http://cdecl.org/

首先,输入:

int (*data)[];

阅读它所说的。现在输入:

int *data[];

再次阅读并注意它不是在说同样的事情。一个是指向 int 数组的指针,一个是指向 int 的指针数组。巨大差距。

如果要动态分配指针数组,data则应声明为:

E **data;

进而

data = new E*[size];
于 2012-06-28T00:44:10.620 回答
1

只需让您的data会员成为E*. 您仍然可以索引数组样式的 ala data[i](该符号与指针和整数值一起使用时,基本上意味着添加指针和 i 乘以所指向对象的大小)。

编辑:

template <typename E>
class X
{
    X(int initial_size) : data_(new E[initial_size]), size_(initial_size) { }
    X(const X& rhs) : data_(new E[rhs.size_]), size_(rhs.size_) { std::copy(...); }
    ~X() { delete[] data_; }
    void capacity(int new_size)
    {
        E* p = new E[new_size];
        std::copy(p, p + new_size, data_);
        delete[] data_;
        data_ = p;
        size_ = size;
    }
    ...
  private:
    E* data_;
    int size_;
};
于 2012-06-28T00:43:55.843 回答