2012-04-23 15 views
7

सी ++ में, जब मैं std::cout उस तरह उपयोग कर रहा हूँ:क्या std :: cout पूरी तरह से ढेर पर चल रहा है?

std::cout << "myString" << std::endl; 

कुछ ऐसा है जिसे std :: अदालत द्वारा ढेर पर आवंटित किया जाएगा है? या std :: cout स्टैक पर सबकुछ करेगा (जिसका अर्थ है कि std :: cout और इसके अंतर्निहित फ़ंक्शन new/malloc/etc... नहीं करेंगे)?

मैं अगर भारी पता करने के लिए का उपयोग कर std :: अदालत कुछ ढेर विखंडन

+3

पर निर्भर करता है कोई गारंटी नहीं कि 'ऑपरेटर << (std :: ostream और, टी)' 'आह्वान नहीं होंगे new' नहीं है। यह किसी भी उपयोगकर्ता द्वारा परिभाषित 'टी' के लिए स्पष्ट रूप से सच है। –

+1

आप ढेर विखंडन से चिंतित क्यों हैं। क्या आप ऐसा कुछ और कर रहे हैं जो इससे बड़ी चिंता करता है? –

+1

@ लोकी एस्टारी मैं सिर्फ जिज्ञासा से पूछ रहा हूं। – Mesop

उत्तर

7

इस विशिष्ट उदाहरण में कारण बन सकता है अपने कोड ढेर पर कोई सीधा आवंटन का कारण नहीं है चाहता हूँ। हालांकि यह इसके काम के हिस्से के लिए ढेर का उपयोग करने के किसी भी विधि के कार्यान्वयन के लिए संभव है। यह पूरी तरह से ठीक है क्योंकि विधि कार्यान्वयन ठीक से बाद में साफ हो जाता है।

यह तर्क operator<<(std::ostream&, T) जैसी विधियों पर लागू होता है।

+0

तो यह एसएलएल के कार्यान्वयन पर निर्भर करता है। क्या ऐसा कुछ भी नहीं है जो निर्दिष्ट करता है कि एसटीएल में 'std :: cout' द्वारा स्मृति को कैसे नियंत्रित किया जाना चाहिए? – Mesop

+3

@olchauvin यह 'stl' के कार्यान्वयन पर निर्भर करता है और दिए गए' टी' के लिए 'ऑपरेटर << 'के कार्यान्वयन पर निर्भर करता है। मुझे विश्वास नहीं है कि 'cout' के कार्यान्वयन के तरीके के बारे में कोई विनिर्देश उपलब्ध है। – JaredPar

5

यह पूरी तरह से बुनियादी सी की एक निश्चित कार्यान्वयन ++ पुस्तकालयों

संबंधित मुद्दे