Seit C++ 11 neigen Entwickler aus verschiedenen Gründen dazu, intelligente Zeigerklassen für Objekte mit dynamischer Lebensdauer zu verwenden. Und mit diesen neuen Smart-Pointer-Klassen, Standards, schlagen Sie sogar vor, keine Operatoren wie new
zu verwenden, stattdessen schlagen Sie vor, make_shared
oder make_unique
zu verwenden, um einige fehleranfällige zu vermeiden.Wie übergebe ich Deleter zu make_shared?
Wenn wir ein Smart-Pointer-Klasse verwenden möchten, wie shared_ptr
, können wir ein wie konstruieren können,
shared_ptr<int> p(new int(12));
Auch möchten wir eine benutzerdefinierte deleter passieren Zeigerklassen zu einem intelligenten,
shared_ptr<int> p(new int(12), deleter);
Auf der anderen Seite, wenn wir make_shared
verwenden möchten, z. int
, statt Verwendung new
und shared_ptr
Konstruktor, wie auf dem ersten Ausdruck oben, wir
auto ip = make_shared<int>(12);
Aber was nutzen können, wenn wir auch gerne eine individuelle deleter zu make_shared
passieren, gibt es einen richtigen Weg, das zu tun? Scheint wie Compiler, mindestens gcc, gibt einen Fehler an,
auto ip = make_shared<int>(12, deleter);
Schreiben Sie Ihre eigene 'make_shared()', die dies unterstützt, es ist machbar. – user1095108