Ich habe versucht, einen einfachen Weg zu finden, um Elemente in einem std::vector<std::shared_ptr<int>>
zu platzieren, konnte aber mit nichts kommen. std::shared_ptr
nimmt Zeiger als Parameter, so kann ich dies noch schreiben:make_shared and emplace Funktionen
std::vector<std::shared_ptr<int>> vec;
vec.emplace_back(new int(10));
aber ich will nicht new
von Hand verwenden, wenn möglich, und mochte lieber std::make_shared
wenn möglich verwenden. Das Problem ist, dass, wenn ich es wirklich verwenden wollen, ich habe push_back
stattdessen verwenden und den Vorteil der in-place Bau verlieren:
std::vector<std::shared_ptr<int>> vec;
vec.push_back(std::make_shared<int>(10));
Gibt es eine Möglichkeit, sowohl die Vorteile von emplace_back
und std::make_shared
zu bekommen? Wenn nicht, gibt es eine Richtlinie, die ich in einem solchen Fall befolgen sollte?
EDIT: Eigentlich habe ich diese Frage gestellt, hatte aber ein nicht verwandtes Problem. Andys Antwort ist die gute und es gibt kein tatsächliches Problem mit der Verwendung von emplace
Funktionen und std::make_shared
auf einmal.
Ich denke, dass so gut wie es –
bekommen geht Hat er nicht sagen, nur, dass er das nicht tun könnte? – 0x499602D2
@ 0x499602D2: Warum nicht? –