C++ 没有合适的默认构造函数(无参数构造函数)

       本来今天吧,想写一个proxy class的范例,写着写着出了个问题,见如下代码

    const int _cap = 10;
    Array1D* _elemArray = new Array1D[_cap];

        同时我为Array1D这个类写了一个构造函数来顶替编译器自动生成的

    Array1D(int inx)
    {
        _elemNum = new T[inx];
    }

        随后报错,提示没有合适的默认构造函数,但是显然,我这里是提供了一个构造函数的,那么问题就出在现有的构造函数不能应对上面的new语句

        联系vector的构造:vector<int>* vec = new vector<int>[20](25); 20是一个vector数组的长度,25是数组中每个vector的长度,则我们可以知道,这里面应该传递了有三种信息:

        1.对new分配内存来说,申请内存的对象类型是个vector

        2.一共有20个这样的对象

        3.25作为这些对象的构造函数的第一个参数传入

 

        那么根据new Array1D[_cap]来看,_cap并不是作为一个参数传递给了Array1D这个类的构造函数,而是作为new函数的一个参数分配内存所用

        也就是说,上述的代码可以这样看new(Array1D,_cap,③);

        其中的③应该是传递给构造函数的参数

 

        则显然,上面我提供的构造函数必须要有一个参数存在(因为没有使用默认值,事实上这个问题如果给inx一个默认值就不需要提供一个新的无参数构造函数了,不过分离这个问题出来对理解C++的构造函数更有帮助,我觉得使用默认值有点绕开这个问题的意思(逃)),但最上面的代码并没有提供这一参数,故此处实际上是需要一个没有参数的构造函数添加进代码(在此代码中实际上也没需要,空函数体也没问题),之后便通过了编译。

posted @ 2019-08-27 21:47  随处可见的阿宅  阅读(4787)  评论(0编辑  收藏  举报