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

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

21

01.04.2015, 16:09

Also der unique_ptr hat einen Overhead von praktisch oder sogar gleich null? Also gegen den spricht nun wirklich nichts (ausser geteilte Besitzverhältnisse).
- Längere Kompilierungszeit
- Schwerer lesbar
- C++11 Abhängigkeit
- ständig muss .get() aufgerufen werden

Ich will nicht sagen, dass std::unique_ptr schlecht ist, aber etwas das nur Vorteile hat, scheint es in C++ nicht zu geben :)
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

22

01.04.2015, 16:12

(Das ist ja witzig. Das Forum macht aus "schlecht ist" "schlecht isst". Wenn man auf Zitieren klickt sieht man, dass ichs richtig geschrieben hab)
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

23

01.04.2015, 16:15

  1. Ist doch ein sehr geringer Effekt. Besonders wenn man andere Teile der STL verwendet.
  2. Ne, eher nicht doch. Ich finde ein Programm sogar besser lesbar, wenn direkt im Programm Besitzerverhältnisse angegeben sind.
  3. Warum sollte man auf C++11 überhaupt verzichten? Komplett darauf zu verzichten bedeutet auf eine gewaltige Menge Komfort zu verzichten. Von der For Loop bis zum variadischen Template spart man doch eine enorme Menge Code.
  4. Naja, so häufig auch nicht, weil der -> Operator auch direkt funktioniert. Außerdem, ist get zu schreiben ein Nachteil? Es scheint mir nicht viel Aufwand zu sein.

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

24

01.04.2015, 16:44

1. Es ist nicht viel, aber sowas akkumuliert sich. Man vergisst schnell, dass der Compiler für jede Instantiierung die ganze Klasse neu parsen muss. In jeder cpp Datei.
2. Das mit dem Besitzerverhältnis finde ich auch gut. Aber std::unique_ptr<T> ist einfach viel schwerer zu lesen als T*.
3. Da gibt's wohl viele Gründe. Der häufigste dürfte wohl sein, dass ein benötigter Compiler es noch nicht unterstützt.
4. Es ist nicht viel Aufwand, aber es ist nervig und macht Code unleserlich. Mit normalen Pointern habe ich das Problem nicht. Und ja, ich weiß, warum das Komitee sich gegen implizite Konvertierung entschieden hat.

PS: Ok, Rechtschreibfehler und 1. April, hab's verstanden :)
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

25

01.04.2015, 18:31

Naja, man hat mehr zu schreiben, dafür sieht und weiß man aber, was passiert. Ein f(ptr.get()) bzw. f(move(ptr)) ist halt länger als das ehemalige f(ptr), aber dafür sieht man direkt, ob f das Objekt nur benutzt oder besitzt. Man schreibt mehr und bekommt dafür mehr, ich finde das ziemlich fair. Und letztendlich ist es halt einfach Gewöhnungssache. C++ hat eine so kompakte Syntax, dass man echt eine Weile braucht um zu sehen was eigentlich passiert, wenn es durch solche Neuerungen etwas expliziter wird, bin ich nur dafür.
Lieber dumm fragen, als dumm bleiben!

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

26

01.04.2015, 18:42

Hope, this april's fool doesn't break english orthography...
  1. That's a good point, but in my experience the unique_ptr code makes up a barely noticable amount of object code, compared to all the other stuff I link.
  2. Well, it is more to type, especially for functions using a damn lot of parameters. But if it annoys you so much, why not just use using UStuff = std::unique_ptr<Stuff>?
  3. Well, if you want to develop a general purpose library like Boost, you have a point. Otherwise I prefer the way: "If your compiler doesn't have it, it sucks."
  4. There's worse than the tree-letter get.

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:

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

27

01.04.2015, 19:10

Also der unique_ptr hat einen Overhead von praktisch oder sogar gleich null? Also gegen den spricht nun wirklich nichts (ausser geteilte Besitzverhältnisse).
- Längere Kompilierungszeit
- Schwerer lesbar
- C++11 Abhängigkeit
- ständig muss .get() aufgerufen werden

Ich will nicht sagen, dass std::unique_ptr schlecht ist, aber etwas das nur Vorteile hat, scheint es in C++ nicht zu geben :)


  1. Hält sich in Grenzen
  2. Naja, finde ich jetzt nicht. Sowohl bei std::make_unique als auch bei dem normalen CTor mit new finde ich es nicht schwerer lesbar...
  3. Ja, das ist nunmal so, das neue Features auch von der neuen Standardversion abhängig sind. for(int i = 0 [...]) braucht man auch C99, vorher ging das auch nicht.
  4. Wo bitte? * und -> sind beide überladen, wenn ich eigene Funktionen schreibe, verlange ich nur noch selten nach einem Raw-Pointer, sondern schiebe lieber eine const-Ref des SmartPointers rein. C Funktionen (Die Raw-Pointer brauchen), verwende ich in meinem Code gar nicht mehr. Kannst du mir ein Beispiel für modernen C++ Code geben, in dem du mit get() arbeiten musst?
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

28

01.04.2015, 20:58

4) Raw-Pointer sind schon irgendwie hübscher als const-Referenzen auf Unique-Pointer.
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]

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

29

01.04.2015, 21:05

4) Raw-Pointer sind schon irgendwie hübscher als const-Referenzen auf Unique-Pointer.

Klar sind sie hübscher, aber dafür hat man auch moderneren Code. Man benutzt heutzutage schließlich auch void bar(const std::vector<Foo>& foobar) statt void bar(Foo foobar[])
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

30

01.04.2015, 21:15

Aber manchmal ist ein einfacher Zeiger eben einfacher als so ein Smart Gedöns ;)
PS: Wo bleibt die Krönung aller Rechtschreibprobleme: mancmal und einfahc ? :D

Werbeanzeige