Eigene Klasse in ein Array packen
-
@Swordfish Alle Objekte haben einen Konstruktor. Erzeugung im Speicher immer zweistufig:
-
Speicher allokieren.
-
Speicherinhalt beim Konstruktordurchlauf manipulieren.
-
Immer, 2) beim Aufruf.
Anderes Beispiel:
class A
{
};A* a = new A(); Defaultkonstruktor (gibts immer)
aber:
class A
{
A()
{ echo("Hallo");}
};dann führt A* a = new A(); zu "Hallo"
und mit
class A
{
A()
{ echo("Hallo");}A(int x)
{ echo(x);}
};... kann ich mir aussuchen, welchen Konstruktor ich will:
A* a1 = new A();
A* a2 = new A(42);
-
-
@Swordfish sagte in Eigene Klasse in ein Array packen:
@m1chak sagte in Eigene Klasse in ein Array packen:
Konstruktoraufruf
Konstruktoren kann man nicht explizit aufrufen.
Placement
new
weint traurig in seiner stillen Ecke, weil nie jemand an es denkt
-
@SeppJ sagte in Eigene Klasse in ein Array packen:
Placement
new
weint traurigDein Ernst?
@m1chak Na schön, dann ruf' einen Konstruktor explizit auf. Basisdatentypen haben aber trotzdem keinen, das kannst Du rumdrehen wie Du willst.
-
@m1chak sagte in Eigene Klasse in ein Array packen:
int x(42);
diese schreibweise ist irreführend. was passiert bei 'int x;' ?
aufruf eines default-konstruktors der nichts macht?
und warum wird plötzlich ein verstecktes 'int x(0);' daraus, wenn x keine lokale variable ist?
ich nehme an, diese schreibweise existiert, damit man primitive typen in templates und makros so verwenden kann, als wären es klassen.
-
@Swordfish sagte in Eigene Klasse in ein Array packen:
@m1chak sagte in Eigene Klasse in ein Array packen:
Konstruktoraufruf
Konstruktoren kann man nicht explizit aufrufen.
Ach wie nett, deshalb gibt es ja auch die
explicit
Konstruktoren, damit das nicht geht.
-
@john-0 sagte in Eigene Klasse in ein Array packen:
Ach wie nett, deshalb gibt es ja auch die explicit Konstruktoren, damit das nicht geht.
foo("hugo")
... das ist in dem fall kein Funktionsaufruf, das meinte ich damit.
-
@Swordfish sagte in Eigene Klasse in ein Array packen:
foo("hugo")
... das ist in dem fall kein Funktionsaufruf, das meinte ich damit.Konstruktoren sind keine normalen Funktionen, aber wenn foo kein POD ist, wird eine Funktion ausgeführt, außer der Konstruktur ist komplett zur Compilezeit evaluierbar, dann wird es schon beim Übersetzen gemacht.
P.S. POD == plain old data ist eindeutiger als "Basisdatentypen".
-
@john-0 sagte in Eigene Klasse in ein Array packen:
P.S. POD == plain old data ist eindeutiger als "Basisdatentypen".
pod schließt structures mit ein (basistypen die einen constructor haben können). ich würde eher zwischen primitiven und komplexen datentypen unterscheiden.
was ist ein 'basistyp', außer einer definitionslücke?
-
@john-0 ich hab' keine zeit für solchen quatsch. http://eel.is/c++draft/class.ctor#2
-
@Bushmaster sagte in Eigene Klasse in ein Array packen:
pod schließt structures mit ein (basistypen die einen constructor haben können).
http://eel.is/c++draft/depr.meta.types#4
@Bushmaster sagte in Eigene Klasse in ein Array packen:
ich würde eher
http://eel.is/c++draft/basic.types#9
http://eel.is/c++draft/class.prop
-
@SeppJ sagte in Eigene Klasse in ein Array packen:
Placement
new
weint traurig in seiner stillen Ecke, weil nie jemand an es denktNachdem
std::allocator<T>::construct
in C++17 deprecated und C++20 removed ist, wird placementnew
wohl wieder neue Freunde finden.
-
@Swordfish sagte in Eigene Klasse in ein Array packen:
@john-0 ich hab' keine zeit für solchen quatsch. http://eel.is/c++draft/class.ctor#2
Wie schön, dass andere Deinen sprachlichen Nachlässigkeiten hinterher räumen müssen.