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++的構造函數更有幫助,我覺得使用默認值有點繞開這個問題的意思(逃)),但最上面的代碼並沒有提供這一參數,故此處實際上是需要一個沒有參數的構造函數添加進代碼(在此代碼中實際上也沒需要,空函數體也沒問題),之后便通過了編譯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM