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 }