Tôi nên sử dụng cho mục đích std::get_temporary_buffer
nào? Tiêu chuẩn nói như sau:
Nhận một con trỏ tới bộ nhớ đủ để lưu trữ tối đa n đối tượng T liền kề.
Tôi đã nghĩ rằng bộ đệm sẽ được phân bổ trên ngăn xếp, nhưng điều đó không đúng. Theo Tiêu chuẩn C ++, bộ đệm này thực sự không phải là tạm thời. Hàm này có những ưu điểm gì so với hàm toàn cục ::operator new
, hàm này cũng không tạo ra các đối tượng. Tôi có đúng rằng các câu sau đây là tương đương không?
int* x;
x = std::get_temporary_buffer<int>( 10 ).first;
x = static_cast<int*>( ::operator new( 10*sizeof(int) ) );
Chức năng này chỉ tồn tại cho đường cú pháp? Tại sao lại có temporary
tên của nó?
Một trường hợp sử dụng đã được đề xuất trong Tạp chí Tiến sĩ Dobb, ngày 01 tháng 7 năm 1996 để triển khai các thuật toán:
Nếu không có bộ đệm nào có thể được cấp phát hoặc nếu nó nhỏ hơn yêu cầu, thuật toán vẫn hoạt động chính xác, Nó chỉ chậm lại.
std::get_temporary_buffer
sẽ không được chấp nhận trong C ++ 17.