2012-11-05 13 views
15

मैं कक्षा noncopyable कक्षा के उदाहरण बनाने के विपरीत करना चाहता हूं, यानी, सुनिश्चित करें कि किसी विशेष वर्ग के उदाहरण केवल प्रतिलिपि के रूप में पारित किए जा सकते हैं और नहीं संदर्भ के रूप में। यदि कोई फ़ंक्शन संदर्भ द्वारा इसे प्राप्त करने का प्रयास करता है, तो मैं इसे संकलन त्रुटि (आदर्श) या रन टाइम त्रुटि देना चाहता हूं।क्या किसी ऑब्जेक्ट को संदर्भित करना संभव है

मुझे नहीं लगता कि operator & निजी ऐसा करने जा रहा है, क्या ऐसा करने का एक वैध तरीका है।

+2

उचित प्रश्न लेकिन संभावना है कि यदि आप ऐसा करना चाहते हैं तो यह खराब डिजाइन का संकेत है। यदि इस ऑब्जेक्ट का उपयोग पूरे समय किया जाता है तो यह आपको एक बड़े कार्य को फैक्टर करने से रोक देगा। – djechlin

+1

दिलचस्प विचार, लेकिन यह मूल रूप से उस तरह के ऑब्जेक्ट को पॉइंटर को अस्वीकार करने जैसा ही होगा, और यह मेरे लिए बहुत अनुचित लगता है। –

+0

@ डैनएफ पॉइंटर्स को अस्वीकार करने से मुझे लगता है कि यह आसान होगा। 'और' निजी बनाना इसे करना चाहिए। – san

उत्तर

7

मुझे नहीं लगता कि ऑपरेटर बनाने & निजी ऐसा करने जा रहा है, क्या ऐसा करने का एक वैध तरीका है।

नहीं, क्योंकि & आप पास-बाय-रेफरेंस के लिए फ़ंक्शन हस्ताक्षर में उपयोग करते हैं, ऑपरेटर नहीं है। आप ऑपरेटर (यूनरी) या bitwise- और ऑपरेटर (बाइनरी) के पते के बारे में बात कर रहे हैं। तो पास-दर-संदर्भ के साथ इसका कोई लेना-देना नहीं है।

के प्रकार के लिए पास-बाय-रेफरेंस को अस्वीकार करने का कोई तरीका नहीं है।

मुझे शक है आपकी प्रेरणा काफी मजबूत यह करने के लिए है, और आप गुजर तंत्र की एक बुरा समझ है दिखाई देते हैं:

किसी भी समारोह संदर्भ द्वारा इसे प्राप्त करने के प्रयास करता है, मुझे यह पसंद है देने के लिए होगा एक संकलन त्रुटि (आदर्श) या एक रन टाइम त्रुटि।

कोई फ़ंक्शन संदर्भ या पैरामीटर द्वारा पैरामीटर पास करता है। यह घोषणा के द्वारा तय किया गया है, और मुझे लगता है कि आपका भ्रम यहां से पैदा होता है। उदाहरण के लिए:

void foo(X x); 

पैरामीटर x मूल्य से लेता है। संदर्भ द्वारा इसे पारित करने का कोई तरीका नहीं है। बिल्कुल नहीं। इसी तरह:

void foo(X& x) 

संदर्भ द्वारा इसे लेता है, और यह हमेशा होगा।

+0

धन्यवाद कि मददगार था – san

17

यह असंभव है। कोई भी नामित चर उचित प्रकार के संदर्भ चर से जुड़ सकता है। यही वह भाषा है जो भाषा काम करती है।

विशेष रूप से, आपके पास अपने प्रतिबंध के साथ कॉपी कन्स्ट्रक्टर कभी नहीं हो सकता है, इसलिए आप वास्तव में ऑब्जेक्ट को मूल्य से पार नहीं कर पाए!

+3

+1। –

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

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