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

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

11

01.04.2015, 08:09

Nein, es gibt keinen portablen Weg um auf diese Information zuzugreifen.
Naja, es gibt schon einen. Man braucht nur die new[] und delete[] Operatoren ueberladen und dann entsprechend implementieren.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

01.04.2015, 08:11

Und dann immer wieder das Anpreisen von smart_prt und diesen Dingen. Ehrlich. Ich bin noch nicht so alt, als das ich mir nicht merken kann wo ich denn ein new mache und dann noch
eine delete machen muß. All dieser shared_ unique_ smart_ptr Kram ist doch albern aus meiner Sicht.

Dann benutzt du wohl keine Exceptions.
Warum etwas ablehnen, das dir eigentlich nur Vorteile bringt?
Es scheint, als hättest du dich mit der Thematik nur sehr oberflächlich befasst.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

01.04.2015, 08:20

Er benutzt vermutlich wirklich keine Exceptions, sondern return-Codes ;) Fraglich wie er das dann bei Konstruktoren genau macht. Vielleicht mit Init-Methoden. :whistling:
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

01.04.2015, 10:01

Nein, es gibt keinen portablen Weg um auf diese Information zuzugreifen.
Naja, es gibt schon einen. Man braucht nur die new[] und delete[] Operatoren ueberladen und dann entsprechend implementieren.

Stimmt, das wäre in der Tat eine Möglichkeit...

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

15

01.04.2015, 11:01

Also ich habe mich schon ausführlich mit dem Thema beschäftigt. Auch ich habe die Bücher von Scott Meyers und Alexandrescu gelesen.
Aber ich halte es halt für überflüssig.
Die Antworten von BlueCobold überspringe ich immer direkt. Da macht man mal eine Ausnahme und schon bereut man es.

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

16

01.04.2015, 11:10

Pff, RAII. Braucht keine Sau. Upgraden wir alle zu C.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

17

01.04.2015, 11:13

Witzig das Blue immer als das Böse angesehen wird, obwohl er meistens sachlich bleibt und auch noch Recht hat.
Das ablehnen von smart_ptr und containern geht in die Richtung: "ich habe zwar keine Ahnung warum ich sie nicht nutzen will, aber irgendwer muss ja schlauer sein als der ganze Rest".

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

18

01.04.2015, 11:16

Also der unique_ptr hat einen Overhead von praktisch oder sogar gleich null? Also gegen den spricht nun wirklich nichts (ausser geteilte Besitzverhältnisse).
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

19

01.04.2015, 11:40

Ja, std::unique_ptr isst bei ein zeitgemäßen Compiler absolut ohne Overhead. Die Klasse enthält im Prinzip einfach bloß den Zeiger und löscht ihn im Destruktor. Das selbe was man auch selbst machen würde. Also kein Overhead.

Geteilte Besitzverhältnisse sind sehr selten und auch kein Grund dagegen. In dem Fall muss man zwar std::shared_ptr verwenden, aber Raw Pointer sind doch noch weiter vom Nutzungsmuster entfernt. Für Raw Pointer die ein Objekt besitzen gibt es eigentlich keinen Grund.

Zitat von »birdfreeyahoo«

Also ich habe so mitbekommen, dass vector die beliebteste Datenstruktur der STL für 1-dimensionale Container ist. Hat das einen Grund warum z.B. nicht list oder deque bevorzugt wird?

BlueCobold hat schon die theoretischen Aspekte beleuchtet. In der Praxis sieht es auch so aus, dass es nie oder extrem selten vorkommt, dass man die Eigenschaften benötigt, bei denen die std::list oder std::deque glänzt. Selbst bei der Worst Case Verwendung der std::list überholt sie den std::vector erst bei einigen tausenden durchschnittlichen Elementen. Das kommt von dem hohen Overhead durch die vielen einzelnen Allokationen. Zudem kann man in der Praxis den Zugriff meistens einfach so umformen, dass man auch bei dem std::vector ohne die potentiell teuren Operationen auskommt.(Zum Beispiel ein zu löschendes Element nicht löschen sondern mit den letzten tauschen) Außerdem ist die std::list durch Caching Effekte wesentlich langsamer beim Iterieren. Klar, die Elemente sind wild im Speicher verteilt und hinter n Pointern versteckt, während sie beim std::vector direkt hintereinander liegen. Meine Empehlung ist: Immer std::vector nehmen.

Nebenbei möchte ich noch die Möglichkeit von Arrays in Smart Pointern hinweisen: std::unique_ptr<T[]>

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Spiele Programmierer« (01.04.2015, 16:07)


birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

20

01.04.2015, 14:40

Danke für die Antworten.


Die Antworten von BlueCobold überspringe ich immer direkt. Da macht man mal eine Ausnahme und schon bereut man es.


Muss ich das verstehen? Meiner Erfahrung nach waren die Antworten oft richtig und präzise, oda?

Werbeanzeige