Uygulamamda dizeleri ve hata iletilerini oluşturmak için kapsamlı olarak std::stringstream
kullanıyorum. stringstreams
genellikle çok kısa ömürlü otomatik değişkenlerdir.Std :: stringstream önyükleme yapmalı mıyım?
Böyle bir kullanım, her değişken için yığın yeniden tahsisine neden olur mu? Geçici olarak sınıf üyesi stringstream
değişkenine geçmeli miyim?
İkinci durumda, stringstream
arabelleği nasıl yedekleyebilirim? (Yeterince büyük bir dizeyle başlatmalı mıyım yoksa daha zarif bir yöntem mi olmalıyım?)
İyi tavsiyeler; bununla birlikte, 50'yi rezerve etmek ve daha sonra bu diziyi kopyalamak, küçük bir yığın olmayan arabellek en iyileştirmesini (uygulamanızın bir tane varsa) yenebilir. Kendi streambuf'unuzu yazmak istiyorsanız, tüm buffer yönetimi üzerinde kesin kontrolünüz var; daha sonra rdbuf aracılığıyla bir stringstream'in arabelleğini değiştirmek yerine akım akışınızı (ya da akış yönünü veya iostream'i kullanırsınız, ancak soru çıkış biçimlendirmesini gösterir.) –
Dize akışı, str'nin içerik uzunluğundan (0) daha fazla bir şey ayırmadığını düşünmüyorum. Cplusplus.com'a göre: "İçerik olarak str'nin bir kopyasına sahip bir ostringstream nesnesi oluşturur." Referans, "dize içeriğinin kopyası". Açıkça, aynı miktarda belleği ayırdığını söylemez. Bu yapıcıyı kullanarak bellek ayırma hakkında herhangi bir şey söyleyen herhangi bir kaynak bulamadım. – NickSoft
Yukarıda kullandığınız kurucu artık geçerli değil. Kopya olmayan kurucunun kaldırıldığını görebilirsiniz. http://www.cplusplus.com/reference/sstream/stringstream/stringstream/ – user1122069