2013-05-21 13 views
15

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 .

Odpowiedz

14

Można pozwolić budowa ruch w miejscu wystąpienia:

vec.emplace_back(std::make_shared<int>(42)); 
+0

myślę, że jest tak dobry, jak to się dzieje, aby uzyskać –

+0

Czy nie po prostu powiedzieć, że nie może tego zrobić? – 0x499602D2

+0

@ 0x499602D2: Dlaczego nie? –

Powiązane problemy