下面是我的代码:
template<typename T, std::size_t N>
class my_array {
public:
const T& at(std::size_t index) const
{
if(index>N) throw std::out_of_range("Index is wrong. Try again");
return data[index];
}
...
my_array()
{
T data[N];
}
~my_array()
{
delete[] data;
}
private:
T* data;
};
在my_array()方法中,我想创建一个类型为T的静态数组,但我真的不明白如何创建。例如,这种方式行不通。
我试着用上面写的方法来做,我也试着用typedef,虽然我可能做错了,但没有一种方法有效。
我该怎么做?
1条答案
按热度按时间gk7wooem1#
我猜你想做的是在堆栈上创建一个数组,就像
std::array
一样?如果是这样,你可以这样做:注意,不应该在数组上调用
delete
,因为没有用new
分配内存。因为这里没有使用new
进行内存分配,所以您可以创建一个空的构造函数和析构函数,或者像我一样使用my_array() = default;
指定它。正如一些评论所说,您可能会访问
at()
方法中的越界元素。使用index >= N
代替(数组从0到N-1)。顺便说一下,你可以从STL中打开文件
array
,看看它的实现。他们已经定义了像这样的数据_Ty _Elems[_Size];
。编辑:
正如这个答案的注解所述,如果类总是空的,你就不应该为它定义析构函数。通过编写类似
~my_array() = default;
或my_array(){}
的代码,并且不指定移动构造函数,数据将始终被复制而不是移动。