Tôi đã cố gắng tìm một số cách dễ dàng để phát ra các phần tử trong một std::vector<std::shared_ptr<int>>
nhưng không thể đi kèm với bất cứ điều gì. std::shared_ptr
mất con trỏ như tham số, vì vậy tôi vẫn có thể viết này:make_shared và chức năng emplace
std::vector<std::shared_ptr<int>> vec;
vec.emplace_back(new int(10));
Tuy nhiên, tôi không muốn sử dụng new
bằng tay nếu có thể, và thay vì muốn sử dụng std::make_shared
nếu có thể. Vấn đề là nếu tôi thực sự muốn sử dụng nó, tôi phải sử dụng push_back
thay vào đó và mất lợi thế của việc xây dựng tại chỗ:
std::vector<std::shared_ptr<int>> vec;
vec.push_back(std::make_shared<int>(10));
Có cách nào để có được những ưu điểm của cả hai emplace_back
và std::make_shared
? Nếu không, có một hướng dẫn tôi nên làm theo trong trường hợp như vậy?
EDIT: Thực ra, tôi đã đặt câu hỏi này nhưng gặp sự cố không liên quan. Câu trả lời của Andy là tốt nhất và không có bất kỳ vấn đề thực tế với việc sử dụng cả hai chức năng emplace
và std::make_shared
cùng một lúc.
Tôi nghĩ đó là tốt như nó đang diễn ra để có được –
Không anh chỉ nói anh không thể làm điều đó? – 0x499602D2
@ 0x499602D2: Tại sao không? –