Wie nennen Destruktor geben Sie in der Vorlage?
Zum Beispiel haben wir eine Funktion wie:
template <typename TYPE>
void construct_and_destruct(TYPE & object)
{
//...
}
Wir kippe Aufruf Konstruktor und Destruktor wie object.Type()
und object.~Type()
(nicht wahr nun) ( Whyy? =C )
Aufruf der Konstruktor-wir können wie new(&object) TYPE()
. Und ich weiß nicht, wie Aufruf Destruktor (nicht existieren Platzierung delete
). Wie Sie dies tun?
- Sollten Sie split der code, den Sie interessiert sind, aus den dtor und in einem separaten member-Funktion und Aufruf, statt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie rufen Sie den Destruktor als:
aber es ist wahrscheinlich nicht das, was Sie wollen, und unterliegen einem doppelten löschen.
Konstruktor ist so einfach wie:
object = TYPE();
führen zusätzlicheoperator =
. Statt dieses besser verwenden Sie placement-new (mit seltsamen syntax =)).object.~TYPE(); new (object) TYPE();
Es ist viel Reiniger zu verwendenobject = TYPE();
Lass das system bereinigen nach sich selbst.TYPE
müssen davon ausgehen, in seiner Zuweisungsoperator, dass einer der Konstruktoren, die zuvor aufgerufen wurde. Werden Sie die Verletzung.TYPE object
zu einigen urzeitlichen Zustand, und ist dabei übernew (&object) TYPE(<some argument list>);
. Es gibt ein problem, nur mit der Platzierung neu hier: Das placement-new kann die Ursache für die zugewiesenen Ressourcen inobject
zu lecken. Lösung: Zerstörenobject
bevor Sie zu rekonstruieren. Dies ist der Grund, warum ich denke, h4Bytes ist zu Fragen, über den Destruktor explizit aufrufen. Es gibt einen viel besseren Weg, das zu erreichen, was er will, außer dieser verworrenen Aufruf von Destruktor, gefolgt von placement-new.new (object) TYPE()
. Das ist illegal, natürlich, das argument der Platzierung der neuen soll es sich um einen Zeiger. Was ich meinte warnew (&object) TYPE()
-- oder vielleicht etwas anderes als den default-Konstruktor.object.~TYPE()
undobject.~TYPE::TYPE()
sind beide richtig, denke ich. Klingt ein bisschen dubios aber, was wollen Sie erreichen?object.~TYPE()
ist falsch. Ich weiß, dass construct_and_destruct ist nutzlose Funktion, aber ich Schreibe dies für Beispiel.object.~TYPE()
korrekt ist. Das heißt, warum würden Sie wollen, rufen Sie den Destruktor?new
Betreiber, können Sie nicht an den standarddelete
aber Sie brauchen, um Ihr eigen nennen.