Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » feststellen ob objekt mit new erstellt wurde

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 <
010
14.01.2004, 13:47 Uhr
RHBaum



Wobei man das sich wirklich zum konkreten problem machen kann .... besonders wenn man smartpointerklassen schreiben will und die 100% vorm User absichern mag ...

nen :

C++:
smartpointer<char> myptr(reinterpret_cast<char *> (malloc(128)));


Bringt jeden noch so guten Ansatz ins jaehe Binaergrab :-)
Wobei man dem user hier schon etwas kriminelle Energie zugestehen muss.

klein wenig praxisnaher ist eher, ob man nen object mittels new oder new[] erzeugt hat ... also ob man delete oder delete[] aufrufen muss. Das es mit in C++ definierten C-Strings funzt ... also:

C++:
smartpointer<char> myptr ( new char[128]);


hat auch eher was damit zu tun, das char nen PDT ist ...
bei:

C++:
smartpointer<char> myptr(new MyCoolCLass[128]);


koennt man auch wieder argumentieren, Ihhhhhh C-Arrays, warum ned in eigener Klasse kapseln ?

Ansonsten faellt mir momentan kein so richtiger Grund ein, warum man wissen muesste, wie nen Zeiger erzeugt wurde .... Vorsicht ist eh ueberall geboten, mit zeigern kann man eh so ziemlich alles kaputtmachen, wenn man nur will

Ciao ...

Dieser Post wurde am 14.01.2004 um 13:51 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
14.01.2004, 16:11 Uhr
(un)wissender
Niveauwart


@Windalf
Wenn new fehlschlägt, dann wirft es std::bad_alloc, nur wenn du explizit sagst, bitte gib NULL zurück, wir null zurückgegeben (new(nothrow) type).
Darum immer aufpassen, wenn man Klassen exceptionsicher machen will!
Sonst entstehn das schnell Ressourcenlecks.
(Wobei new normalerweise, wenn man nicht gerade 4 GB Speicher haben will, nicht fehlschlägt, aber verlassen kann man sich darauf nicht!)

Ob nun der Speicher mit new oder malloc oder mit api geholt worden ist, kann du nie (portabel ) überprüfen.
Wenn man den Adresseraum kennt(nicht portabel), kann man prüfen, ob der Zeiger dynamisch allokiert wurde, das ist aber auch schon alles.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
14.01.2004, 17:52 Uhr
0xdeadbeef
Gott
(Operator)


Läuft das auf einen Garbage Collector hinaus?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
14.01.2004, 19:10 Uhr
~pepe__
Gast


Danke für eure vielen Beiträge. Ich bin mir jetzt ziemlich sicher, dass das was ich wollte nicht geht.
Das ungefähr wollte ich machen: (Es geht um einen Szenengraph mit Renderer: OpenGL)

Objekte sollen einerseits innerhalb der main Funktion erstellbar. Dies sollte am besten mit

GeometryNode cube("cube");

und nicht mit
GeometryNode* cube=new GeometryNode("cube");

allerdings sollten auch während der Laufzeit dynamisch Objekte erstellbar sein, d.h. da würde sich das nur mit Hilfe von new lösen lassen. Alle Pointer auf die Objekte werden innerhalb eines Containers gespeichert und beim beenden des Programms gehe ich einfach durch alle Elemente des Containers und gebe den speicher mit delete frei. Dies führt natürlich bei nicht dynamisch erzeugten Objekten zu einem Fehler mit anschließender SegFault.
Darum dachte ich es gebe so eine Funktion mit der man überprüfen kann ob sich das Löschen mit delete überhaupt lohnt.

Pepe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


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: