spezieller Klassen-Konstruktor im Array



  • Hallo community,

    für mich ist es unlogisch warum ich nicht einen speziellen Konstruktor einer Klasse als array-Definition aufrufen kann. Kann mir das jemand erklären?
    Bsp:

    #include<cstddef>
    #include<iostream>
    #include <windows.h>
    
    class Foo
    {
       private: 
          int *p;
          size_t length;
       public:
          Foo(): length(0)
          {
             p=new int(length);
             std::cout << "Standard Konstruktor Foo. Variable length= " << length << std::endl;
          }
          Foo(size_t size): length(size)
          {
             p=new int(length);
             std::cout << "Spezieller Konstruktor Foo. Variable length= " << length << std::endl;
          }
    };
    
    int main()
    {
       Foo *a = new Foo(5);     // geht
       Foo *a = new Foo(5)[3];  // geht nicht
       system("pause");
       return 0;
    
    }
    

    Wie überlade ich gegebenenfalls den new-Operator?
    Danke.

    Heuni



  • new gar nicht überladen.
    nimm statt des rohen arrays eine passende containerklasse.



  • nein, Containerklasse kann ich leider nicht nehmen. Ich brauche leider die Basics, da ich ein vorhandenes Projekt ändere.
    Das mit dem Array im Array ist auch nur ein Beispiel. Das Foo-Objekt kann alles mögliche sein.

    Ich möchte einfach nur einen speziellen Klassen-Konstruktor für ein Array aufrufen?? Also, muss ich den new-Operator überladen?



  • Heuni Greenfreak schrieb:

    Ich möchte einfach nur einen speziellen Klassen-Konstruktor für ein Array aufrufen?? Also, muss ich den new-Operator überladen?

    Nein, benutz einen Container den du meinetwegen selber geschrieben hast der das für dich tut.

    Du kommst bei new Überladungen in teufels küche.

    ansonsten kannst du auch ::operator new verwenden um den rohen Speicher zu besorgen und std::uninitialized_fill zum erstellen der Objekte. Das ganze in eine Funktion gepackt ist viel viel viel besser als new zu überladen.


Anmelden zum Antworten