En ausencia de plantillas variadic (¡todavía!) En Visual Studio 2010/2011, un constructor que toma muchos parámetros puede ser problemático. Por ejemplo, la siguiente no se compilará:std :: make_shared número de parámetros en el constructor
MyMaterials.push_back(std::make_shared<Material>(MyFacade,
name,
ambient,
diffuse,
specular,
emissive,
opacity,
shininess,
shininessStrength,
reflectivity,
bumpScaling,
maps,
mapFlags));
, ya que tiene 13 parámetros y creo make_shared se limita a arg0 a Arg9. El trabajo obvio es una construcción en dos partes, pero esperaba evitar esto. ¿Hay alguna otra posibilidad aquí, aparte del uso de nuevo en lugar de make_shared?
Gracias.
Ah. Por supuesto. Eso tiene perfecto sentido. – Robinson
Lo bueno es que make_shared también usará una rutina de asignación única optimizada al crear shared_ptr –
Lo siento, no veo cómo esto evita copiar de la pila local (donde se está construyendo Material()) al montón (donde make_shared en realidad colocarlo). En este caso, ¿cómo se puede evitar la copia? – Mordachai