我正在研究一个代表托管数组的模板类。
E (*data)[];
数据是我的数组。
data = new E[size];
而这,它不喜欢。它把我扔了;
无法在分配中将 Component* 转换为 Component (*)[] 给出了什么?
即使我没有将指针类型传递给我的模板类型,任何人也可以解释为什么 E 用 * 表示?
E (*data)[];
data
是指向 E 数组的指针,而不是指向 E 的指针(不要与指向 E 的指针数组混淆)。有一个非常明显的区别。
编辑:为了帮助您理解...
new
正在向您返回一个指向 的指针E
,但您已将其声明data
为指向E数组的指针。数组是 C 中的一种类型!它不仅仅是变相的指针。在某些情况下,数组可能会衰减为指针,但不会双向。
编辑2:
根据您的评论:
我的印象是我正在创建一个新的 E 指针数组?
首先,输入:
int (*data)[];
阅读它所说的。现在输入:
int *data[];
再次阅读并注意它不是在说同样的事情。一个是指向 int 数组的指针,一个是指向 int 的指针数组。巨大差距。
如果要动态分配指针数组,data
则应声明为:
E **data;
进而
data = new E*[size];
只需让您的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_;
};