自我创建的指针在c ++中的Vector类(代码的解释)

时间:2017-12-19 16:28:49

标签: c++

假设我们已经创建了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]},特别是:为什么我们在此处[]签名?在这种情况下它意味着什么?

3 个答案:

答案 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'中的数组长度。字段。

所以,' []'意味着阵列'并且里面的数字是数组的长度。

此处的冒号符号被称为"初始化列表",它初始化此处提到的每个成员(用逗号分隔),初始化顺序由成员的顺序驱动,因为您将它们放在类本身中(而不是它们在初始化列表中的优先级!)。