1 सवाल: जब कोरोटीन के लिए पारित अस्थायी नष्ट हो जाते हैं?

पर बनाया गया सवाल Thu, Mar 28, 2019 12:00 AM

मैं कोरटाइन कार्यों के लिए पारित किए गए अस्थायी लोगों के जीवनकाल के बारे में उलझन में हूं। इस उदाहरण पर विचार करें:

cppcoro::task<> UseObject(Object const& object);

cppcoro::task<> CallUseObject() {
    co_await UseObject(Object()); // is this valid?
}

यदि ये शून्य लौटाने वाले कार्य थे, तो 06003509911001001350350 के लिए पारित Object() अर्ध-कोलन में नष्ट हो जाएगा (अर्थात् 06003509911001001350 के पूरा होने के बाद)। हालांकि, मुझे यकीन नहीं है कि अगर कोरटाइन के लिए भी यही लागू होता है। क्या संदर्भ द्वारा एक अस्थायी को नियमित करना सुरक्षित है? यदि अस्थायी बृहदान्त्र नष्ट हो जाता है अगर यह अर्ध उपनिवेश में नहीं है?

इसके अलावा, एक स्वच्छता जांच के रूप में, क्या यह हमेशा लिखना सुरक्षित है:

UseObject

चूंकि UseObject co_await खत्म होने के बाद नष्ट हो गया है?

    
13
  1. मुझे यह कहने के लिए मोहक है कि कथन के अंत में
    cppcoro::task<> CallUseObject() {
        Object stayingalive;
        co_await UseObject(stayingalive);
    }
    
    की मृत्यु हो गई, लेकिन मैं गलत हो सकता हूं। कोरटीन की तरह 'पास पास वैल्यू'
    के लिए एक बढ़िया विकल्प है
    2019-03-28 16: 48: 25Z
  2. यदि फ़ंक्शन कॉरटीन को संदर्भित करता है जो संदर्भ द्वारा पैरामीटर प्राप्त करता है, तो कॉलर फ़ंक्शन कोरटाइन के पूर्ण होने तक, पारित ऑब्जेक्ट के जीवनकाल के लिए ज़िम्मेदार होता है। यह वास्तव में सिंक्रोनस कॉल के लिए एक ही नियम है, लेकिन अब आपको मामले से निपटना चाहिए जब फ़ंक्शन बाहर निकलता है, लेकिन पूरा नहीं होता है, और सभी अस्थायी नष्ट हो जाते हैं। co_await ऑपरेटर मदद नहीं करता है, क्योंकि यह ऑपरेटर रिटर्न वैल्यू पर काम करता है, जो आपको फंक्शन एग्जिट के बाद ही मिलता है।
    2019-04-09 21: 34: 55Z
    1 उत्तर                              1                         

    यह वास्तव में एक noreferrer"> खुला विषय है मुद्दा ,

स्रोत रखा गया यहाँ