Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

21

29.08.2008, 16:17

Zitat von »"Anfänger"«

Damit kann ich leben^^.


Du musst sogar damit leben!
@D13_Dreinig

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

22

29.08.2008, 18:22

Zitat von »"dot"«

Zitat von »"Helmut"«

Zitat von »"Anfänger"«

Der Compiler hat ja auch das Sonderrecht den Konstruktor direkt aufrufen zu dürfen^^

Das darfst du auch;) Macht man aber eher selten...


das stimmt nur bedingt. was du wohl meinst ist ein function style cast. der sieht aus wie ein konstruktoraufruf und ist es prinzipiell auch.
technisch gesehen kannst du einen konstruktor aber gar nicht aufrufen, da ein konstruktor keinen namen hat ;)

Immer diese Ungläubigen:) Natürlich kann man einen CTor aufrufen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <new>
#include <iostream>
using namespace std;

struct Klasse
{
    int dummy;
    Klasse()
    {
        cout<<"CTor"<<endl;
    }
    ~Klasse()
    {
        cout<<"DTor"<<endl;
    }
};

void main()
{
    unsigned char mem[sizeof(Klasse)];
    Klasse* p = new(&mem) Klasse();//Hier rufen wir den CTor auf. &mem ist der this Zeiger
    p->~Klasse();//Und der DTor darf auch nicht fehlen
}

Unter dem Stichwort placement new bekommt man mehr Infos.
Aber wie gesagt, das braucht man eher selten.

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

23

29.08.2008, 18:35

Zitat von »"Helmut"«

...


das is kein direkter konstruktoraufruf. auch wenn es so aussehen mag...

in dem fall wird zunächst der entsprechende operator new (der bitte nicht mit dem new operator zu verwechseln ist) verwendet um speicher zu allokieren. danach wird ein objekt vom angegebenen typ mit den angegebenen parametern im vom operator new gelieferten speicher konstruiert (das implementiert aber der compiler, und der verwendet dazu natürlich den entsprechenden konstruktor).

wie gesagt, rein technisch gesehen (der sprachdefinition nach) ist das kein direkter konstruktoraufruf. du kannst einen konstruktor in C++ nicht direkt aufrufen wie z.b. eine normale methode (schon allein weil er keinen namen hat). indirekt (z.b. über new oder einen ausdruck der ein entsprechendes temporäres objekt erzeugt, etc.) ist das natürlich möglich.

dazu halte dir vielleicht folgendes beispiel vor augen:

C-/C++-Quelltext

1
2
int* a = new int;
int* b = new int();


es geht auch ohne () und zwischen der variante mit den () und der ohne ist betreffend der art der initialisierung ein kleiner aber feiner unterschied.

prinzipiell hast du natürlich recht. und die syntax ist auch sicherlich nicht zufällig so gewählt ;)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

24

29.08.2008, 18:55

Naja gut, ich hab das direkt überlesen;)

Meine gepostete Methode geht natürlich durch eine Art Wrapper, der den CTor aufruft (aber keinen Speicher allokiert)

Allerdings wird es im nächsten Standard glaube ich möglich sein, innerhalb eines CTors einen anderen CTor aus der gleichen Klasse aufzurufen. Immerhin etwas:)

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

25

29.08.2008, 22:59

Zitat von »"Helmut"«


Allerdings wird es im nächsten Standard glaube ich möglich sein, innerhalb eines CTors einen anderen CTor aus der gleichen Klasse aufzurufen. Immerhin etwas:)


Jep, das ist geplant und wurde auch Zeit! ;)
@D13_Dreinig

Werbeanzeige