Ich habe das folgende Stück begegnet: < /p>
Beachten Sie, dass der Standarddeleter von Shared_ptr Calls, nicht
delete [] bereitgestellt wurde. Dies bedeutet, dass der Standarddeleter nur dann angemessen ist, wenn ein freigegebener Zeiger ein einzelnes Objekt besitzt, das mit neu erstellt wurde. Leider ist
ein Shared_Ptr für ein Array erstellen, aber falsch: < /p>
< /blockquote>
Code: Select all
std::shared_ptr p(new int[10]); // ERROR, but compiles
< /code>
Wenn Sie also neue [] verwenden, um ein Array von Objekten zu erstellen, müssen Sie
Ihren eigenen Deleter definieren. Sie können dies tun, indem Sie eine Funktion, Funktion
Objekt oder Lambda übergeben, die [] für den übergebenen gewöhnlichen Zeiger löschen. Zum Beispiel: < /p>
< /blockquote>
std::shared_ptr p(new int[10],
[](int* p) {
delete[] p;
});
< /code>
Gibt es einen bestimmten Grund für diese Einschränkung? Wenn der gemeinsame Zeiger intelligent ist, kann es nicht so klug sein, dass die Informationen, ob es sich um ein Array oder ein einzelnes Objekt handelt?std::shared_ptr p(new int[10], std::default_delete());