Mi chiedo perché non hanno permesso un molto più semplice e meglio ...
tua opinione cambierà come si diventa più esperti e incontrare più scritto male, il codice buggy.
shared_ptr<>
, come tutti gli oggetti di libreria standard sono scritti in modo tale da rendere il più difficile possibile causare comportamenti non definiti (vale a dire difficili da trovare bug che sprecano il tempo di tutti e distruggono la nostra volontà di vivere).
considerare:
#include<memory>
struct Foo {};
void do_something(std::shared_ptr<Foo> pfoo)
{
// ... some things
}
int main()
{
auto p = std::make_shared<Foo>(/* args */);
do_something(p.get());
p.reset(); // BOOM!
}
Questo codice non può compilare, e che è una buona cosa. Perché se lo facesse, il programma mostrerebbe un comportamento indefinito.
Questo perché elimineremmo lo stesso Foo due volte.
Questo programma verrà compilato ed è ben formato.
#include<memory>
struct Foo {};
void do_something(std::shared_ptr<Foo> pfoo)
{
// ... some things
}
int main()
{
auto p = std::make_shared<Foo>(/* args */);
do_something(p);
p.reset(); // OK
}
fonte
2016-05-17 12:19:56
Poiché il costruttore di 'std :: shared_ptr' che prende il puntatore è' esplicito' e non c'è alcun operatore che prende il puntatore. – Jarod42
Non è un compito. – LogicStuff