Heim > Backend-Entwicklung > C++ > „make_shared' vs. „shared_ptr': Warum ist One effizienter und ausnahmesicherer?

„make_shared' vs. „shared_ptr': Warum ist One effizienter und ausnahmesicherer?

Mary-Kate Olsen
Freigeben: 2024-12-14 12:19:11
Original
493 Leute haben es durchsucht

`make_shared` vs. `shared_ptr`: Why is One More Efficient and Exception-Safe?

Unterschiede zwischen make_shared und Standard shared_ptr

Warum ist make_shared effizienter?

Um die Effizienz von std::make_shared im Vergleich zu einem standardmäßigen shared_ptr zu verstehen Lassen Sie uns ihre Bauprozesse Schritt für Schritt untersuchen Schritt.

Verwendung des standardmäßigen shared_ptr-Konstruktors:

std::shared_ptr<Object> p2(new Object("foo"));
Nach dem Login kopieren
  • Die Heap-Zuweisung für Object("foo") wird durchgeführt.
  • Der neue std::shared_ptr-Steuerblock wird mit dem Raw erstellt Zeiger.

Verwendung von std::make_shared:

std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
Nach dem Login kopieren
  • Einzelne Heap-Zuweisung sowohl für den std::shared_ptr-Steuerblock als auch für die Objektinstanz durchgeführt.

Ausnahmesicherheit

Im Standard Beim Shared_ptr-Konstruktor-Ansatz wird keine Bereinigung durchgeführt, wenn während der Konstruktion von Object eine Ausnahme ausgelöst wird, sodass Speicher ungenutzt bleibt. Allerdings garantiert std::make_shared, dass das erstellte Objekt und der Kontrollblock Teil einer einzelnen Zuordnung sind und bereinigt werden, wenn eine Ausnahme ausgelöst wird.

Nachteil von std::make_shared

  • Erhöhte Speicherretention im Vergleich zur Verwendung des standardmäßigen shared_ptr-Konstruktors: Da std::make_shared eine einzelne Zuweisung durchführt, kann der angegebene Speicher nicht freigegeben werden bis der Steuerblock nicht mehr verwendet wird. Schwache Zeiger auf das Objekt können den Kontrollblock am Leben halten und möglicherweise zu einer längeren Speicherretention führen.

Das obige ist der detaillierte Inhalt von„make_shared' vs. „shared_ptr': Warum ist One effizienter und ausnahmesicherer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage