for (auto i : v5) {
i->go();
}
Must be
for (auto& i : v5) {
i->go();
}
.
, , std::unique_ptr std::shared_ptr explicit. - :
#include <iterator> // make_move_iterator, begin, end
template<class T>
std::unique_ptr<T> make_unique(){
return std::unique_ptr<T>(new T());
}
std::unique_ptr<Base> v1_init_arr[] = {
make_unique<Derived>(), make_unique<Derived>(), make_unique<Derived>()
};
auto first = std::make_move_iterator(std::begin(v1_init_arr));
auto last = std::make_move_iterator(std::end(v1_init_arr));
std::vector<std::unique_ptr<Base>> v1(first, last);
std::vector<std::shared_ptr<Base>> v2 = {
std::make_shared<Derived>(),
std::make_shared<Derived>(),
std::make_shared<Derived>()
};
Good Thing β’, ( , ). unique_ptr, , unique_ptr , .
, std::map<std::string, std::unique_ptr<LoaderBase>> .