tôi sẽ làm
std::wstringstream temp;
ss.swap(temp);
Chỉnh sửa: đã sửa lỗi do christianparpart và Nemo báo cáo. Cảm ơn.
Tái bút: Đoạn mã trên tạo một đối tượng dòng chuỗi mới trên ngăn xếp và hoán đổi mọi thứ ss
với những đối tượng trong đối tượng mới.
Ưu điểm:
- Nó đảm bảo
ss
bây giờ sẽ ở trạng thái mới.
- Đối tượng mới được tạo nội tuyến và trên ngăn xếp, để trình biên dịch có thể dễ dàng tối ưu hóa mã. Cuối cùng, nó sẽ giống như đặt lại tất cả
ss
dữ liệu bên trong về trạng thái ban đầu.
Hơn:
So với toán tử gán: Phương thức hoán đổi STL có thể nhanh hơn toán tử gán trong trường hợp đối tượng mới có bộ đệm được cấp phát trong heap. Trong trường hợp như vậy, toán tử gán phải cấp phát bộ đệm cho đối tượng mới, sau đó CÓ THỂ cần cấp phát bộ đệm khác cho đối tượng cũ, rồi sao chép dữ liệu từ bộ đệm của đối tượng mới sang bộ đệm mới của đối tượng cũ. Rất dễ dàng để thực hiện một hoán đổi nhanh, chẳng hạn như hoán đổi các con trỏ của bộ đệm.
C ++ 11. Tôi đã thấy một số triển khai của toán tử chuyển nhượng di chuyển chậm hơn so với hoán đổi, mặc dù điều đó có thể được khắc phục, nhưng có lẽ nhà phát triển STL sẽ không muốn để lại một đối tượng đã di chuyển với nhiều dữ liệu
std::move()
không đảm bảo đối tượng đã di chuyển được làm trống. return std::move(m_container);
không xóa m_container. Vì vậy, bạn sẽ phải làm
auto to_return (std :: move (m_container)); m_container.clear (); quay lại_trở_lại;
Không thể tốt hơn
auto to_return;
m_container.swap(to_return);
return to_return;
bởi vì cái sau đảm bảo nó sẽ không sao chép bộ đệm.
Vì vậy, tôi luôn thích swap()
miễn là nó phù hợp.