Objectdefinition über zwei Klassen

OP #7464831
Lesenswert?
• ▲
▼

Hallo, ich verstehe nicht ganz den Code unten drunter.

  1. wie wird der Parameter (Entity* ptr) den ScopedPtr Constructor übergeben ?
  2. Warum kann ich das Objekt e über die Entity Klasse erstellen, muss ich hier nicht vererben (also class ScopedPtr : public Entity)?
1
class Entity
2
{
3
public:
4
Entity(){/* bla bla... */}
5
~Entity(){/* bla bla... */}
6
};
7
class ScopedPtr
8
{
9
private:
10
Entity* m_ptr;
11
public:
12
ScopedPtr(Entity* ptr) : m_ptr(ptr){}
13
~ScopedPtr(){delete m_ptr;}
14
};
15
int main()
16
{
17
{
18
ScopedPtr e = new Entity():
19
}
20
return 0;
21
}

VG

#7464933
Lesenswert?
• ▲
▼

Michael S. schrieb:

  1. wie wird der Parameter (Entity* ptr) den ScopedPtr Constructor übergeben ?

Einfach so, oder was meinst du mit "wie"? Dein 'new Entity()' erzeugt einen Zeiger auf Entity, und dieser wird als Parameter 'ptr' an den ScopedPtr-Konstruktor übergeben.

  1. Warum kann ich das Objekt e über die Entity Klasse erstellen, muss ich hier nicht vererben (also class ScopedPtr : public Entity)?

Nein. Du hast einen Konvertierkonstruktor von Entity* nach ScopedPtr definiert, und der kommt hier zur Anwendung. Wenn du keine implizite Konvertierung willst, musst du den Konstruktor als 'explicit' definieren:

1
explicit ScopedPtr(Entity* ptr) : m_ptr(ptr){}
#7464967
Lesenswert?
• ▲
▼

Michael S. schrieb:

muss ich hier nicht vererben

Nein, du musst auch nicht von 'int' vererben, wenn du eine 'int' Membervariable nutzt.

Michael S. schrieb:

wie wird der Parameter (Entity* ptr) den ScopedPtr Constructor übergeben

https://en.cppreference.com/w/cpp/language/copy_assignment

Da es blöd ist, in ScopedPtr eine Entity zu verwenden, weil er auf die Art nur als ScopedPtr für den Typ Entity und davon abgeleitete taugt und fur jeden anderen Typ noch ein ScooedOthertypePtr definiert werden müsste, sollte ScopedPtr besser als template definiert werden, oder zumindest Typ Any benutzen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.