मैं अपने आवेदन में स्ट्रिंग्स और त्रुटि संदेशों का निर्माण करने के लिए बड़े पैमाने पर std::stringstream
का उपयोग करता हूं। stringstreams
आमतौर पर बहुत कम जीवन स्वचालित चर होते हैं।क्या मुझे std :: stringstream preallocate करना चाहिए?
क्या इस तरह के उपयोग प्रत्येक चर के लिए ढेर reallocation का कारण होगा? क्या मुझे अस्थायी से कक्षा-सदस्य stringstream
चर से स्विच करना चाहिए?
बाद के मामले में, मैं stringstream
बफर कैसे आरक्षित कर सकता हूं? (क्या मुझे इसे एक बड़ी पर्याप्त स्ट्रिंग के साथ शुरू करना चाहिए या क्या कोई और सुरुचिपूर्ण विधि है?)
अच्छी सलाह; हालांकि, 50 को आरक्षित करने के बाद उस स्ट्रिंग को कॉपी करने से बदले में एक छोटे गैर-हीप बफर ऑप्टिमाइज़ेशन को नुकसान हो सकता है (यदि आपके कार्यान्वयन में एक है)। यदि आप अपना खुद का स्ट्रीमबफ लिखना चाहते हैं, तो आपके पास सभी बफर प्रबंधन पर सटीक नियंत्रण है; फिर आप ओस्ट्रीम (या आईट्रीम या आईओस्ट्रीम का उपयोग करेंगे, लेकिन सवाल यह इंगित करता है कि आउटपुट स्वरूपण यहां चिंता है) rdbuf के माध्यम से स्ट्रिंगस्ट्रीम के बफर को बदलने के बजाए आपके स्ट्रीमबफ के साथ। –
मुझे लगता है कि स्ट्रिंगस्ट्रीम आरक्षित कुछ भी 'str' की सामग्री लंबाई (जो 0 है) से अधिक नहीं है। Cplusplus.com के अनुसार: "सामग्री के रूप में स्ट्र की एक प्रति के साथ एक ostringstream ऑब्जेक्ट बनाता है।" संदर्भ sais "स्ट्रिंग सामग्री की प्रति"। यह स्पष्ट रूप से नहीं कहता है कि यह समान मात्रा में स्मृति को सुरक्षित रखता है। मुझे कोई भी स्रोत नहीं मिला जो इस कन्स्ट्रक्टर का उपयोग करके स्मृति को आरक्षित करने के बारे में कुछ भी कहता है। – NickSoft
आपके द्वारा ऊपर उपयोग किए जाने वाले निर्माता अब मान्य नहीं हैं। आप देख सकते हैं कि नो-कॉपी कन्स्ट्रक्टर हटा दिया गया था। http://www.cplusplus.com/reference/sstream/stringstream/stringstream/ – user1122069