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

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

1

14.10.2011, 10:51

Kann eine Memberfunnktion ihre eigene Instanz löschen?

Moin

ich hab mal eine ganz banale Frage ( die ja oben schon schön steht).

Kann eine Memberfunnktion ihre eigene Klasse löschen?

das heißt dann ungefähr so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class CLife
{
public:
    float m_fLifeTime;

    bool m_IsAlive ();
    void m_Live ();
};

void CLife::m_Live ()
{
    do
    {   
        m_fLifeTime++;
    } while (m_IsAlive())

    // so und jetzt muss hier irgendetwas hin, dass diese Funktion ihre eigene Instanz löscht
    // wie mache macht man das und funmktioniert das überhaupt?
};

bool CLife::m_IsAlive ()
{
    if (m_fLifeTime < 100)
        return true;
    else
        return false;
};


das ist jetzt einfach ein kleines Beispiel was ich meine.

Es geht darum, dass ich in einem Spiel ein Bonus-Blöck einbauen will.
Wird dieser aber nach einer gewissen Zeit nicht eingesammelt, soll die Funktion sich selbst "zerstören".

Geht das überhaupt?
Und wenn, wie?

ProAmateur
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

14.10.2011, 11:03

Rein technisch geht das, ist aber eine sehr schlechte Idee, da du nicht weisst wie das Objekt erstellt wurde.
Da macht man eher eine Membervariable, die speichert ob das Objekt "lebt" (beachte, dass das leben das Spielobjektes nicht äquivalent mit dem leben des C++ Objektes sein sollte). Dann kann man von aussen abfragen ob das Objekt einen gewissen Zustand hat und ggf. zerstören (oder einfach nur in einen "Schlafzustand" versetzen, wo das Objekt nichts mehr macht).

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

3

14.10.2011, 11:22

Ok stimmt das is viel besser!!
Muss dann zwar jetzt meinen Code bissl bearbeiten aber egal.

jetzt rein aus interesse:
Wie würde man das denn dann machen?
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

14.10.2011, 12:42

Also im Falle von Instanzen mit Referenzzähler ist es z.B. sinnvoll, wenn eine Methode die eigene Instanz löscht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
struct test
{
     grab(void) { refcount++; }
     drop(void) { refcount--; if(refcount <= 0) delete this; } //hier steckt die Antwort auf deine eigentliche Frage
     test(void) : refcount(1) {} //ob von refcount = 1 oder 0 angefangen wird, hängt stark vom benutzungstil ab und sollte per doku klar kenntlich gemacht werden
   private:
      unsigned int refcount;
      ~test() {} //sehr wichtig dass der d'tor privat ist
};
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

Werbeanzeige