Recientemente comencé a usar boost lambda y pensé que lo intentaría y lo usaría en lugares donde debería/debería facilitar la lectura.Cómo usar boost lambda para rellenar un vector de punteros con objetos nuevos
que tienen algo de código similar al siguiente
std::vector< X * > v;
for (int i = 0 ; i < 20 ; ++i)
v.push_back(new X());
y más tarde, para borrarlo ...
std::for_each(v.begin(), v.end(), boost::lamda::delete_ptr());
Qué ordena limpiamente hacia arriba.
Sin embargo, yo pensé que tendría un ir en "lambda-ising" la población del vector lambda utilizando ... Eso es entonces comenzaron los fuegos artificiales ...
Probé ..
std::generate_n(v.begin(), 20, _1 = new X());
pero esto arrojó todo tipo de errores de compilación.
Cualquier idea que es la mejor forma "lambda" de lograr esto.
Thx Marca.
Generalmente, no almacene los punteros dinámicamente asignados en un vector: su código no es una excepción segura y perderá memoria si falla un constructor de X. –
Hola Joe, me interesaría expandirme en esto. No estoy seguro de cómo el constructor de X podría fallar y perder memoria. Pensé que el estándar de C++ decía que, a pesar de las excepciones, volvería a anular y limpiar la memoria antes de volver a lanzar la excepción. Por supuesto que podría estar completamente equivocado. – ScaryAardvark
@ScaryAardvark. New throws std :: bad_alloc si está fuera de memoria - nunca devuelve nulo a menos que use el formulario que no arroja. –