// #include // #include // #include // #include // struct Element { // int value; // Element(int value) : value(value) {} // }; // Реализация функции make_safe_vector() template std::vector> make_safe_vector(T&& container) { std::vector> result; for (auto& el : container) result.emplace_back(std::move(el)); container.clear(); return result; } // int main() { // std::vector unsafe_vector; // unsafe_vector.emplace_back(new Element(0)); // unsafe_vector.emplace_back(new Element(42)); // unsafe_vector.emplace_back(new Element(900)); // auto safe_vector_1 = make_safe_vector(unsafe_vector); // unsafe_vector.push_back(new Element(99)); // auto safe_vector_2 = make_safe_vector(safe_vector_1); // auto safe_vector_3 = make_safe_vector(std::list{new Element(1), new Element(2), new Element(3)}); // std::cout << "unsafe_vector: " << std::endl; // for (auto& el : unsafe_vector) { // std::cout << el->value << std::endl; // delete el; // } // std::cout << "safe_vector_1: " << std::endl; // for (auto& el : safe_vector_1) // std::cout << el->value << std::endl; // std::cout << "safe_vector_2: " << std::endl; // for (auto& el : safe_vector_2) // std::cout << el->value << std::endl; // std::cout << "safe_vector_3: " << std::endl; // for (auto& el : safe_vector_3) // std::cout << el->value << std::endl; // } /* unsafe_vector: 99 safe_vector_1: safe_vector_2: 0 42 900 safe_vector_3: 1 2 3 */