Ten przykład kompiluje się i działa dobrze z gcc 4.8.3:unique_ptr konstruktor z niestandardowym Deleter zostanie usunięty
#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;
}
Ale gdy próbuję go z Visual Studio Professional 2013 to nie kompiluje (narzeka na usuniętej funkcji). Czy to nie jest jeszcze możliwe w Visual Studio 2013? Czy mój kod przykładowy jest nieprawidłowy, a gcc ignoruje mój błąd?
Błąd jest:
main.cpp (8): error C2280: 'std :: unique_ptr> :: unique_ptr> (_ PTR2, _Dx2)': próbuje odwołać usuniętą funkcję z [ _Ptr2 = const char *, _Dx2 = główny :: ] C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ INCLUDE \ memory (16 16): patrz deklaracja 'std :: unique_ptr>: : unique_ptr '
Działa z dzwonkiem. –
Powinny być FAQ na "dlaczego używasz' std :: function' jako 'unique_ptr' deleter strasznego pomysłu?" –
[OT]: ponieważ niczego nie przechwytujesz, możesz pominąć niepotrzebne '=' w '[=]'. – Jarod42