gelöscht Dieses Beispiel kompiliert und läuft gut mit gcc 4.8.3:unique_ptr Konstruktor mit benutzerdefinierten deleter wird
#include <memory>
#include <functional>
#include <iostream>
int main() {
auto str = new const char[6]{'h', 'e', 'l', 'l', 'o', '\0'};
std::unique_ptr<const char[], std::function<void(const char *)>> u_ptr(str, [](const char *s){ delete[] s; });
std::cout << u_ptr.get() << std::endl;
}
Aber wenn ich es mit Visual Studio Professional 2013 versuchen es nicht kompilieren (beschwert sich über eine gelöschte Funktion). Ist dies mit Visual Studio 2013 noch nicht möglich? Oder ist mein Beispielcode falsch und gcc ignoriert meinen Fehler?
Fehler ist:
main.cpp (8): Fehler C2280: 'std :: unique_ptr> :: unique_ptr> (_ Ptr2, _Dx2)': dem Versuch, eine Funktion gelöscht mit zu referenzieren [ _Ptr2 = const char *, _Dx2 = main :: ] C: \ Programme (x86) \ Microsoft Visual Studio 12.0 \ VC \ INCLUDE \ Speicher (16 16): siehe Deklaration von 'std :: unique_ptr>: : unique_ptr '
Funktioniert mit Klang. –
Es sollte eine FAQ geben zu "warum verwendet' std :: function "als 'unique_ptr' eine schreckliche Idee löschen?" –
[OT]: Da Sie nichts erfassen, können Sie nicht benötigte '=' in '[=]' weglassen. – Jarod42