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

21

23.11.2015, 18:09

Kannst es auch mit einer Instanz probieren.
Oder du kannst wie schon @Nimelrian gesagt hat, einen Smart Pointer benutzen.

Hier wäre ein Tutorial von Smart Pointern wenn du noch nicht weiss, wie genau du die benutzt.
https://www.youtube.com/watch?v=nvt7FWk2Gfw

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

22

23.11.2015, 18:27

auto_ptr ist unbedingt zu vermeiden. Der ist längst deprecated und fliegt mit der nächsten Revision des Standard aus der Sprache raus. In VS 2015 kann er bereits per Flag deaktiviert werden. auto_ptr war ein Versuch, das zu tun, was unique_ptr nun richtig macht, zu einer Zeit, als das mit den damaligen Mitteln in C++ noch nicht möglich war...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (23.11.2015, 18:33)


Nimelrian

Alter Hase

Beiträge: 1 216

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

  • Private Nachricht senden

23

23.11.2015, 19:36

Kannst es auch mit einer Instanz probieren.
Oder du kannst wie schon @Nimelrian gesagt hat, einen Smart Pointer benutzen.

Hier wäre ein Tutorial von Smart Pointern wenn du noch nicht weiss, wie genau du die benutzt.
https://www.youtube.com/watch?v=nvt7FWk2Gfw


Selbst in deinem Tutorial ist noch new drin. make_unique und make_shared machen new obsolet.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

24

24.11.2015, 19:45

Ok danke Nimelrian.
Wie sagt man es den Heutzutage?

Bzw. muss ich nur noch den Pointer erstellen und gut ist?

C-/C++-Quelltext

1
std::unique_ptr<MeineKlasse> m_Klasse

25

24.11.2015, 19:51

C-/C++-Quelltext

1
auto m_Klasse = std::make_unique<MeineKlasse>();

Wenn du allerdings noch C++11 nutzt wirst du wohl auf new zurück greifen müssen. Da gibt es noch kein make_unique

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

26

24.11.2015, 20:57

Nein, Smart-Pointer gehen nicht in die Richtung. Das hast Du falsch verstanden.
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]

27

24.11.2015, 21:25

std::unique_ptr zählt keine Referenzen. std::shared_ptr zählt die, gibt aber den Speicher SOFORT wieder frei, nachdem der Counter auf 0 ist, GC macht das nicht unbedingt.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

28

24.11.2015, 21:38

Dann gehört Referenzzählung nicht zu Garbage Collection/automatischer Speicherverwaltung und dieser Artikel hier ist wohl auch Falsch?
Shared_ptr ist ein äußerst selten tatsächlich brauchbarer Anwendungsfall (mir ist bis jetzt kein Fall begegnet, wo geteilte Ownership tatsächlich vorlag). Damit reduzieren sich Smart-Pointer in C++ effektiv auf den unique_ptr. Dieser macht kein Reference Counting und auch keine Garbage-Collection, die sich effektiv vom Verhalten regulärer Stack-Objekte in Hinsicht auf den Lebenszyklus unterscheidet. Er dient zur automatischen Speicherverwaltung, sicher. Aber nicht zu Garbage Collection. Zudem ist er auch semantisch etwas ganz anderes als Java mit seinen Referenzen und GC jemals ausdrücken könnte. Ownership ist in Java gar kein Konzept. Da dieses Konzept in C++ aber eindeutig stärker betont wurde, geht es also keineswegs in diese Richtung.
Smart-Pointer in C++ dienen vor allem auch Exception-sicherem Verhalten was die Freigabe von Ressourcen in heiklen Situationen angeht. Diese Situationen waren vorher gar nicht abgedeckt und stellten ein Problem dar. Sie machen das Leben jedes Entwicklers natürlich trotzdem ungemein einfacher.
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]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (24.11.2015, 21:45)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

29

24.11.2015, 21:57

GC und Smartpointer unterscheiden sich fundamental. Sobald du GC hast, ist die Lebensdauer von Objekten undefiniert. Smartpointer (egal ob sie nun auf Move Semantics basieren oder über Reference Counting, Reference Linking oder sonstwas implementiert sind) erhalten das Konzept der Objektlebensdauer nicht nur, sie basieren überhaupt erst darauf...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (24.11.2015, 22:15)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

30

24.11.2015, 21:58

Na ja, die Diskussion hatten wir ja schon. Wenn ich sehe wie viele C#/Java Entwickler einfach alles in Shared_Ptr verpacken, ist die Schlussfolgerung gar nicht so inkorrekt. Heißt natürlich aber nicht, dass es nicht auch genug C#/Java Entwickler gibt, die sehr wohl wissen, wie sie in C++ damit umzugehen haben.
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]

Werbeanzeige