Trong C ++, 11 emplace_back()
thường được ưa thích (về mặt hiệu quả) push_back()
vì nó cho phép xây dựng tại chỗ, nhưng điều này có còn xảy ra khi sử dụng push_back(std::move())
với một đối tượng đã được xây dựng không?
Ví dụ, emplace_back()
vẫn được ưu tiên trong các trường hợp như sau?
std::string mystring("hello world");
std::vector<std::string> myvector;
myvector.emplace_back(mystring);
myvector.push_back(std::move(mystring));
// (of course assuming we don't care about using the value of mystring after)
Ngoài ra, có bất kỳ lợi ích nào trong ví dụ trên nếu thay vào đó làm:
myvector.emplace_back(std::move(mystring));
hay động thái ở đây là hoàn toàn dư thừa, hoặc không có tác dụng?
myvector.emplace_back(mystring);
sao chép và không di chuyển. Hai động thái còn lại và nên tương đương.