Array von Klassen ohne Defaultkonstruktor und mit einem explicit Kopierkonstruktor



  • Hi,

    kann man das ohne große Hacks hinbekommen?

    class Target { 
    public: 
       Target(int value) {} 
       explicit Target(Target const & other) {} 
    }; 
    
    int main() { 
        Target arr[2] = { 2, 3 }; 
    }
    

    Man muss doch die Elemente eines Arrays initialisieren können, ohne dass die Zugriffsbeschränkungen des Kopierkonstruktors gelten.



  • Eigentlich müsste der Code so schon funktionieren, wenn mich nicht alles täuscht.

    (btw, wozu brauchst du das explicit beim Copy-Ctor?)



  • CStoll schrieb:

    Eigentlich müsste der Code so schon funktionieren, wenn mich nicht alles täuscht.

    (btw, wozu brauchst du das explicit beim Copy-Ctor?)

    Es gibt Compiler, die das als Feature oder Bug kompilieren. Andere, die versuchen Standardkonform zu sein, machen das nicht. xlC 6.0 und gcc kompilieren diesen Code nicht.

    Ich würde bei der tatsächlichen Klasse auch auf das explicit verzichten, aber das steht nicht in meiner Macht. Es soll vor allem verhindern, dass man Objekte dieser Klasse aus versehen per Value übergibt.


Log in to reply