假设我们已经创建了Vector类:
class Vector {
public:
Vector(int s) :elem{new double[s]}, sz{s} { }
double& operator[](int i) { return elem[i]; } subscripting
int size() { return sz; }
private:
double∗ elem;
int sz;
};
此代码中的内容不明确:elem{new double[s]}
,特别是:为什么我们在此处[]
签名?在这种情况下它意味着什么?
答案 0 :(得分:2)
[s]
表示您正在创建包含s
个对象的数组。
作为旁注:你真的应该为你的Vector类提供一个自定义的析构函数,因为你使用的是delete[] elem
new
。否则,你会有内存泄漏。
答案 1 :(得分:1)
此代码中的内容不清楚:elem {new double [s]}
这意味着在声明class Vector
对象时,构造函数将分配一个double
数组,并将该内存块的地址分配给该实例的elem
数据成员。
' {}'表示成员初始化列表,上面的构造函数等同于
Vector::Vector(int s)
{
elem = new double[s];
sz = s;
}
在这种情况下它意味着什么?
在此上下文中,它表示new
运算符返回指向内存中分配的s
(值)大小为double
数组的第一个字节的指针。
即。如果s
为5,则new
运算符在堆中分配等效的double ar[5]
并返回数组的第一个字节(内存块)的地址。
答案 2 :(得分:1)
所以,让我们逐一审核:
Vector(int s) :elem{new double[s]}, sz{s} { }
这一行意味着"类Vector的构造函数应该接收int参数' s'然后分配一系列的双精度数组'元素,记住元素中的数组。字段并记住' sz'中的数组长度。字段。
所以,' []'意味着阵列'并且里面的数字是数组的长度。
此处的冒号符号被称为"初始化列表",它初始化此处提到的每个成员(用逗号分隔),初始化顺序由成员的顺序驱动,因为您将它们放在类本身中(而不是它们在初始化列表中的优先级!)。