SORU
16 Temmuz 2010, Cuma


Neden std ihtiyacım var::get_temporary_buffer?

Kullanmalıyım ne için std::get_temporary_buffer? Standart şunları söyledi:

Alır depolama n bitişik T nesneleri saklamak için yeterli bir işaretçi.

Tampon yığın üzerinde ayrılmış olacağını düşündüm, ama bu doğru değil. C Standardına göre bu tampon aslında geçici değil. Avantajları bu işlev, küresel işlev nesneleri ya da yapı yok ::operator new. Aşağıdaki ifadeler eşdeğerdir, öyle değil mi?

int* x;
x = std::get_temporary_buffer<int>( 10 ).first;
x = static_cast<int*>( ::operator new( 10*sizeof(int) ) );

Bu işlev, yalnızca sözdizimi şeker var mı? Neden adını temporary var mı?


Bir kullanım örneği algoritmaları uygulamak için: Dr. Dobb's Journal, July 01, 1996 önerildi

Hayır arabellek ayrılmış olabilir, ya da istenirse daha küçük ise, algoritma hala düzgün çalışırsa, sadece yavaşlatır.

CEVAP
16 Temmuz 2010, Cuma


Stroustrup diyor"" . C Programlama Dili (§19.4.4SE):

Fikir sistemi-boyutlu sabit bir sayı tamponlar uzay istemek için çok hızlı ayırması için hazır tutabilirnnesneleri daha fazlası için yer verebilirn. Aynı zamanda daha az, ancak verim olabilir, get_temporary_buffer() kullanarak bir şekilde iyimser bir şey istemek için ve daha sonra kullanılabilir olması için ne kullanın.
get_temporary_buffer() düşük düzeyde ve geçici tamponları yönetmek için optimize edilmiş olması muhtemeldir, çünkü [ ... ], bir alternatif olarak kullanılmamalıdıryeniya::ayırıcısı ayırma()uzun süreli depolama elde etmek için.

O da iki işlevi giriş ile başlar:

Algoritmalar genellikle geçici boşluk kabul edilebilir gerçekleştirmek için gerektirir.

... ama bir tanımını sağlamak için görünmüyorgeçiciyadaha uzun vadeliher yerde.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • National Geographic

    National Geo

    7 Mayıs 2006
  • Samvith V Rao

    Samvith V Ra

    20 EKİM 2006
  • Valdorsha

    Valdorsha

    8 Mayıs 2006