Próbowałem znaleźć łatwy sposób na emplace elementów w std::vector<std::shared_ptr<int>>
, ale nie mógł przyjść z niczym. std::shared_ptr
trwa wskaźniki jako parametrów, więc mogę jeszcze napisać to:Funkcje make_shared i emplace
std::vector<std::shared_ptr<int>> vec;
vec.emplace_back(new int(10));
Jednak nie chcę używać new
przez strony, jeśli to możliwe, a raczej, jak korzystać std::make_shared
jeśli to możliwe. Problem polega na tym, że jeśli naprawdę chcesz go używać, trzeba użyć zamiast push_back
i tracą zaletę budowy w miejscu:
std::vector<std::shared_ptr<int>> vec;
vec.push_back(std::make_shared<int>(10));
Czy istnieje jakiś sposób, aby uzyskać korzyści zarówno emplace_back
i std::make_shared
? Jeśli nie, czy w takim przypadku powinienem przestrzegać wytycznych?
EDIT: Właściwie to zadałem to pytanie, ale miałem niepowiązany problem. Odpowiedź Andy'ego jest dobra i nie ma żadnego rzeczywistego problemu z jednoczesnym używaniem funkcji emplace
i .
myślę, że jest tak dobry, jak to się dzieje, aby uzyskać –
Czy nie po prostu powiedzieć, że nie może tego zrobić? – 0x499602D2
@ 0x499602D2: Dlaczego nie? –