Von shared_ptr nach ptr_vector



  • dot schrieb:

    [...] Abgesehen davon, find ich Move Semantik hier viel sauberer und bevorzuge std::vector<std::unique_ptr<T>> schon allein wegen der Konsistenz mit dem Rest der STL...

    Warum man vielleicht doch einen ptr_vector benutzen möchte:

    template<class T, class...Args>
    unique_ptr<T> make_unique(Args&&...args)
    {
       unique_ptr<T> p (new T(forward<Args>(args)...));
       return p;
    }
    
    void oops(vector<unique_ptr<int>> const& v)
    { //                              ^^^^^
       if (!p.empty())
          *v[0] = 99; // klappt trotzdem, da unique_ptr const nicht propagiert
       // ^
       // Extra Dereferenzierung nervt
    }
    
    int main()
    {
       vector<unique_ptr<int>> v;
       v.push_back(make_unique<int>(23));
       oops(v);
       cout << *v[0] << endl;
       //      ^
       // Extra Dereferenzierung nervt
    }
    

Anmelden zum Antworten