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

Posted hotpants

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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++的构造函数更有帮助,我觉得使用默认值有点绕开这个问题的意思(逃)),但最上面的代码并没有提供这一参数,故此处实际上是需要一个没有参数的构造函数添加进代码(在此代码中实际上也没需要,空函数体也没问题),之后便通过了编译。

以上是关于C++ 没有合适的默认构造函数(无参数构造函数)的主要内容,如果未能解决你的问题,请参考以下文章

C++再识类和对象

c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

c++之构造函数,析构函数(五千字长文详解!)

(笔记):构造函数与析构函数

C++的默认构造函数(待确认整理)

C++类和对象中