W jakim celu powinienem użyć std::get_temporary_buffer
? Standard mówi, co następuje:
Uzyskuje wskaźnik do pamięci wystarczającej do przechowywania do n sąsiadujących obiektów T.
Myślałem, że bufor zostanie przydzielony na stosie, ale to nieprawda. Zgodnie ze standardem C ++ ten bufor w rzeczywistości nie jest tymczasowy. Jakie zalety ma ta funkcja w stosunku do funkcji globalnej ::operator new
, która również nie konstruuje obiektów. Czy mam rację, że poniższe stwierdzenia są równoważne?
int* x;
x = std::get_temporary_buffer<int>( 10 ).first;
x = static_cast<int*>( ::operator new( 10*sizeof(int) ) );
Czy ta funkcja istnieje tylko dla cukru składniowego? Dlaczego jest temporary
w jego nazwie?
Jeden przypadek użycia został zasugerowany w Dr Dobb's Journal, 1 lipca 1996, dla implementacji algorytmów:
Jeśli żaden bufor nie może zostać przydzielony lub jeśli jest mniejszy niż żądany, algorytm nadal działa poprawnie, po prostu zwalnia.
std::get_temporary_buffer
zostanie wycofane w C ++ 17.