मैं उदाहरण से शुरू करूंगा। बूस्ट में एक अच्छा "टोकनाइज़र" वर्ग है। यह एक स्ट्रिंग ले एक निर्माता में पैरामीटर के रूप tokenized जा करने के लिए:किसी कन्स्ट्रक्टर में मौजूदा ऑब्जेक्ट के पॉइंटर/संदर्भ को पारित करने का पसंदीदा तरीका क्या है?
std::string string_to_tokenize("a bb ccc ddd 0");
boost::tokenizer<boost::char_separator<char> > my_tok(string_to_tokenize);
/* do something with my_tok */
स्ट्रिंग tokenizer में modifed नहीं है, तो यह स्थिरांक वस्तु संदर्भ द्वारा पारित कर दिया है। इसलिए मैं एक अस्थायी वस्तु वहाँ पारित कर सकते हैं:
boost::tokenizer<boost::char_separator<char> > my_tok(std::string("a bb ccc ddd 0"));
/* do something with my_tok */
सब कुछ ठीक लग रहा है, लेकिन अगर मैं tokenizer इस्तेमाल करने की कोशिश, एक आपदा होता है। छोटी जांच के बाद मुझे एहसास हुआ कि टोकननाइज़र क्लास उस संदर्भ को संग्रहीत करता है जिसे मैंने दिया है, और आगे के उपयोग में उपयोग करें। बेशक यह अस्थायी वस्तु के संदर्भ के लिए अच्छी तरह से काम नहीं कर सकता है।
प्रलेखन स्पष्ट रूप से यह नहीं कहता कि कन्स्ट्रक्टर में पारित वस्तु का उपयोग बाद में किया जाएगा, लेकिन ठीक है, यह भी नहीं कहा गया है कि यह नहीं होगा :) तो मैं यह नहीं मान सकता, मेरी गलती।
हालांकि यह थोड़ा उलझन में है। सामान्य स्थिति में, जब एक वस्तु कॉन्स्ट संदर्भ द्वारा किसी अन्य को ले जाती है, तो यह सुझाव देता है कि अस्थायी वस्तु वहां दी जा सकती है। तुम क्या सोचते हो? क्या यह एक बुरा सम्मेलन है? शायद इस तरह के मामलों में ऑब्जेक्ट (संदर्भ के बजाय) का सूचक होना चाहिए? या फिर भी - क्या यह तर्क के लिए कुछ विशेष कीवर्ड उपयोगी नहीं होगा जो अस्थायी वस्तु को पैरामीटर के रूप में अनुमति देने/अस्वीकार करने की अनुमति देता है?
संपादित करें: प्रलेखन (संस्करण 1.49) के बजाय न्यूनतम है और केवल बात यह है कि ऐसी समस्या का सुझाव दे सकते है:
नोट: कोई पार्स वास्तव में निर्माण पर किया जाता है। पार्सिंग मांग पर की जाती है क्योंकि टोकन को शुरुआत से प्रदान किए गए इटरेटर के माध्यम से पहुंचाया जाता है।
लेकिन यह स्पष्ट रूप से यह नहीं बताता है कि दिया गया वही ऑब्जेक्ट का उपयोग किया जाएगा।
हालांकि, इस प्रश्न का बिंदु इस तरह के मामले में कोडिंग शैली के बारे में चर्चा है, यह केवल एक उदाहरण है जिसने मुझे प्रेरित किया।
एक ही चीज़ से काटा गया। जब मैं सक्षम हूं, तो मैं कम से कम संकेत के लिए बूस्ट :: रेफरी का उपयोग करता हूं, कम से कम संकेत देता है कि संदर्भ – Anycorn
संग्रहीत किया जाएगा यदि मुझे बूस्ट :: टोकनज़र में वास्तव में कोई बग है तो मुझे आश्चर्य होगा। – CashCow
@CashCow: यह प्रलेखन में एक बग है, जिसमें 'टोकनज़र' अपने जीवनकाल की अवधि के लिए अपने कन्स्ट्रक्टर तर्क का संदर्भ रखता है जो अस्थायी लोगों के साथ नरक है ... –