Frage zu C++ Code(RAII)

Hallo liebe Community!

Zunächst mal entschuldigung für den schlechten Titel aber mir ist dazu echt nichts eingefallen.

ich steh grad vor Folgendenm Problem:

Code:
int main()
{
    std::cout<<"you"<<std::endl;
    system("pause");
}

gegeben ist dieses Code stückchen die Ausgabe soll so verändert werden das "I love you" rauskommt.

das ganze hab ich nun auch gelöst sieht dann so aus :
Code:
#include <iostream>

using namespace std;

class c
{
public:
    c()
    {
        cout<<"I\n";
    }

    ~c()
    {
        cout<<"Love\n";
    }
    

}bla;





int main()
{
    std::cout<<"you"<<std::endl;
    system("pause");
}

Funktioniert wunderbar nur versteh ichs nicht ganz also Konstruktor Dekonstruktor ist klar allerdings heißt das Objekt c und es wir nirgends ein objekt c erstellst bzw aufgerufen ??? es liegt alles nur an dem Ende der Klasse

Code:
}bla;

aber ich könnte anstatt "bla; " auch irgenwas beliebiges schreiben warum ??

ich glaube man nennt dies RAII ??

wäre net wenn mir jemand auf die sprünge helfen könnte übrigens funktioniert das ganze auch mit einem struct.

Danke im vorraus
 
Das ganze funktioniert, weil du eben eine Variable vom Typ c hast, namentlich bla. Folgender Code bewirkt das genau gleiche:
Code:
class c:
{ ...
};

c blubber;

int main( ...
Mit RAII würde ich es nicht direkt bezeichnen, da du keine wirkliche Resource verwaltest bzw. bedienst. Als besseres Beispiel würde mir zum Beispiel eine Logdatei einfallen, die von einem Logger verwaltet wird. Die Log-Clients schicken ihre Nachrichten an den Logger, und der schreibt sie in das Logfile. Dazu darf es dann aber eben nur einen Logger geben, womit man für eben den RAII einsetzen könnte.
Um nocheinmal kurz auf dein Beispiel zurück zu kommen: Wenn du globale Variablen anlegst, werden diese vor dem Aufruf von main initialisiert und nach dem Beenden von main wieder zerstört, es werden also jeweils Konstruktor und Destruktor aufgerufen.
Richtig lustig wirds dann, wenn du deine globalen Variablen nicht statisch mitlinkst sondern dynamisch nachlädst, dann musst du noch expilizit angeben, dass alle Symbole beim Laden gleich initialisert werden. Aber da ist die manpage zu dlopen ganz gut.

mfg benediktibk
 
Zurück
Oben