在Visual Studio 2010/2011中缺少可變參數模板(仍然!)的情況下,需要大量參數的構造函數可能會有問題。例如以下將無法編譯:std :: make_shared構造函數中的參數個數
MyMaterials.push_back(std::make_shared<Material>(MyFacade,
name,
ambient,
diffuse,
specular,
emissive,
opacity,
shininess,
shininessStrength,
reflectivity,
bumpScaling,
maps,
mapFlags));
,因爲它有13個參數,我認爲make_shared從arg0到arg9是有限的。明顯的解決方法是兩部分構建,但我希望避免這種情況。除了使用新的而不是make_shared之外,還有其他可能嗎?
謝謝。
啊。當然。這很有道理。 – Robinson 2012-04-04 13:58:48
好處是,make_shared在創建shared_ptr時也會使用優化的one-allocation例程 – 2012-04-04 14:00:08
對不起 - 我不明白這是如何避免從本地堆棧(其中Material()正在構建中)複製到堆(make_shared實際上放好它)。在這種情況下,如何避免複製? – Mordachai 2013-02-11 21:06:21