3 Stimmen

Wie übergibt man einen Deleter an eine Methode derselben Klasse, die von einem shared_ptr gehalten wird?

Ich habe mehrere Klassen aus 3rd-Party-Bibliothek ähnlich wie die Klasse, StagingConfigDatabase, die nach der Erstellung zerstört werden muss. Ich verwende eine shared_ptr für RAII, würde es aber vorziehen, die shared_ptr mit einer eine einzige Code-Zeile anstatt einen separaten Vorlagenfunktor zu verwenden, wie mein Beispiel zeigt. Vielleicht mit Lambdas? oder binden?

struct StagingConfigDatabase
{
  static StagingConfigDatabase* create();
  void destroy();
};

template<class T>
    struct RfaDestroyer
    {
        void operator()(T* t)
        {
            if(t) t->destroy();
        }
    };

    int main()
    {
      shared_ptr<StagingConfigDatabase> pSDB(StagingConfigDatabase::create(), RfaDestroyer<StagingConfigDatabase>());
    return 1;
    }

Ich dachte an etwas wie:

shared_ptr<StagingConfigDatabase> pSDB(StagingConfigDatabase::create(), [](StagingConfigDatabase* sdb) { sdb->destroy(); } );

aber das lässt sich nicht kompilieren :(

Hilfe!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X