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.