Giochicchiando un po' con gli smart pointers mi sono imbattuto nel codice sottostante che mi ha sorpreso non poco.
Questo codice produce come output:codice:#include <iostream> #include <memory> #include <utility> using namespace std; struct Foo { ~Foo() { cout << "~Foo()\n"; } void f() const { cout << "Foo:f()\n"; } }; int main() { unique_ptr< Foo > un{ new Foo() }; { shared_ptr< Foo> sh = move(un); sh->f(); } if(!un) cout << "un is empty\n"; un->f(); return 0; }
Ma mi aspettavo almeno UB. Qualcuno saprebbe darmi una spiegazione?codice:Foo:f() ~Foo() un is empty Foo:f()