Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » textdatei einlesen, manipulieren etc.

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
13.07.2007, 17:34 Uhr
Kest
saint


Hi!


Zitat von 0xdeadbeef:

In C++ bloß exit nicht benutzen. Der führt dir keine Destruktoren aus, das ist im Endeffekt schlimmer, als wenn dir das Programm einfach so abschmiert.


Cooler Spruch, auch wenn er falsch ist: für statische Objekte werden logischerweise Destruktoren aufgerufen, was nicht nicht von Bedeutung wäre!!!

Ansonsten hat Blubber2063 recht. Denn sonst sehe ich auch nicht, wie ich die Ressourcen anders managen soll.
Auch mit den Ausnahmen ist da was net so... Ich mein, ist doch offensichtlich, dass jeder Spieler ab und zu stirbt. Damit muss man rechnen, und einfach durch exit.... naja.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 13.07.2007 um 17:38 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
13.07.2007, 17:45 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Die MSDN sagt dazu folgendes:

Zitat:

When you call the exit or _exit functions, the destructors for any temporary or automatic objects that exist at the time of the call are not called. An automatic object is an object that is defined in a function where the object is not declared to be static. A temporary object is an object created by the compiler.


Also hat beefy recht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
13.07.2007, 18:04 Uhr
Kest
saint


Man sollte logischerweise zwischen >exit< und >_exit< unterscheiden.
Dass es bei >_exit< micht der Fall ist, weiß, glaub ich, jeder.

Da hast du mich wohl besiegt, denn ich habe keine Ahnung wie ich es dir beweisen soll, obwohl ich 100000% sicher bin, dass ich recht habe. Und zu surfen, und irgendwas rauszusuchen... naja ist nicht meine Art.
Andererseits trau ich, wenn es vor allem um Standard geht, MSDN wohl am wenigsten. Die scheitern in diesem Fall schon daran, indem sie >_exit< in >stdlib.h< stecken.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
13.07.2007, 18:12 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ist aber in diesem Fall vollkommen egal. Selbst wenn es im Standard anders steht, da wir hier im Windows Forum sind zählt auch nur das wie es letzten Endes unter Windows funktioniert.


und ich habs gerade auch mal ausprobiert, per exit werden keine Destruktoren aufgerufen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
13.07.2007, 18:31 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von Kest:

Cooler Spruch, auch wenn er falsch ist: für statische Objekte werden logischerweise Destruktoren aufgerufen, was nicht nicht von Bedeutung wäre!!!

Für statische Objekte möglicherweise (compilerabhängig), aber die sollte man idealerweise überhaupt nicht haben. Für Stackobjekte gilt das allerdings nicht, zum Beispiel beendet

C++:
#include <cstdlib>
#include <iostream>

struct A {
  ~A() { std::cout << "boo" << std::endl; }
};

int main() {
  A a;
  exit(0);
}


ohne Ausgabe. Oder kann es laut Standard zumindest, und der g++ macht es auch so. Im Standard garantiert ist es, wenn mich nicht alles täuscht, nicht mal für statische Objekte - exit führt lediglich mit atexit registrierte Funktionen aus, pusht einen Rückgabewert auf den Stack und beendet den Programmfluss. Um Destruktoren kümmert sich exit nicht - kann es auch garnicht, denn es kommt ja aus der C-Bibliothek.

Ähnliche Probleme ergeben sich übrigens mit goto.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
22.07.2007, 19:22 Uhr
Kest
saint



Zitat von >ISO/IEC 14882:2003<:

Destructors for initialized objects of static storage duration (declared at block scope or at namespacescope) are called as a result of returning from main and as a result of calling exit. These objects are destroyed in the reverse order of the completion of their constructor or of the completion of their dynamic initialization. If an object is initialized statically, the object is destroyed in the same order as if the object was dynamically initialized. For an object of array or class type, all subobjects of that object are destroyed before any local object with static storage duration initialized during the construction of the subobjects is destroyed.


--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
22.07.2007, 21:18 Uhr
0xdeadbeef
Gott
(Operator)


Oookay, scheinbar für statische Objekte schon :P Ich bin allerdings der Meinung, das vor Jahren mal anders erlebt zu haben...möglicherweise mit VC++ 6 oder so - der ist ja standardtechnisch nicht besonders gut.

So oder so, Objekte auf dem Stack werden dadurch nicht zerstört - und das reicht schon, um exit in C++ zu einer schlechten Idee zu machen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: