2011-03-27 7 views
5
std::string getMyString() { return <make a string>; } 

... 

HANDLE something = OpenSomething(getMyString().c_str(), ...); 

मैंने Guaranteed lifetime of temporary in C++ पढ़ा है और मेरा मानना ​​है कि अस्थायी स्ट्रिंग तब तक लाइव रहेगी जब तक असाइनमेंट का मूल्यांकन नहीं किया जाता है, यानी यह काम अपेक्षित होने के लिए काफी लंबा है।क्या यह एक अस्थायी std :: स्ट्रिंग का उचित उपयोग है?

से पहले एक बार एक std::string जीवन से संबंधित बग में चलाने के बाद (याद नहीं कर सकते कि यह क्या था) मैं नहीं बल्कि दोहरी जांच होगी ...

उत्तर

7

हाँ, यह ठीक है। :-)

अर्ध कोलन में कथन के अंत में स्ट्रिंग नष्ट हो जाएगी।

8

अस्थायी के लिए नाशक के बाद जब तक नहीं कहा जा जाएगा फ़ंक्शन कॉल रिटर्न, तो हम यहां जो देखते हैं वह सुरक्षित है।

हालांकि बुलाया समारोह char* बचत होती है और इसके बादOpenSomething वापस आ गया है किसी भी तरह इस्तेमाल किया जा रहा समाप्त होता है, तो यह है कि एक ठीक सूचक झूलते है।

+0

हां, अच्छा बिंदु - हालांकि यह नहीं है। –

0

यदि आप OpenSomthing के किसी भी अन्य तर्क का उपयोग नहीं करते हैं तो पॉइंटर को getMyString.c_str() पर लौटने के लिए सब कुछ ठीक रहेगा।

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

  • कोई संबंधित समस्या नहीं^_^