2010-10-29 10 views
14

क्या यूनियन के साथ एक या अधिक तरीकों से कुछ गलत है? या कुछ भी देखने के लिए बाहर? (मैं रचनाकारों/विनाशकों को स्किज़ोफ्रेनिक कारणों के लिए समस्याग्रस्त देख सकता हूं)सी ++: विधियों के साथ संघ?

+0

मुझे विनाशकों और मुक्त स्मृति के बारे में आपने जो कुछ बताया है, उसके अलावा मुझे उनके साथ कुछ भी गलत नहीं दिख रहा है। – Jim

+1

यही कारण है कि आप एक वर्ग/संरचना प्रकार के संघीय सदस्य नहीं हो सकते हैं जिनमें एक गैर-तुच्छ कन्स्ट्रक्टर, विनाशक या असाइनमेंट ऑपरेटर है। –

उत्तर

20

सी ++ 03 & C++ 0x (ड्राफ्ट N3092) मानकों से:

9,5 यूनियन
एक संघ ( निर्माणकर्ता और विनाशकर्ता सहित) सदस्य कार्य कर सकते हैं, लेकिन वर्चुअल (10.3) फ़ंक्शंस। एक संघ में बेस क्लास नहीं होंगे। एक संघ आधार वर्ग के रूप में उपयोग नहीं किया जाएगा।

कुल प्रारंभकर्ता वाक्य रचना (U u = { 42 };) का उपयोग संघ शुरु कर रहा है या एक सदस्य बाद में (U u; u.i = 42;) की स्थापना "समस्याग्रस्त" नहीं है। और न ही इसे एक कन्स्ट्रक्टर (U u(42);) का उपयोग करके शुरू कर रहा है।
केवल "पकड़" यह है कि आप एक संघ के लिए कुल प्रारंभकर्ता वाक्यविन्यास का उपयोग नहीं कर सकते हैं जिसमें उपयोगकर्ता परिभाषित कन्स्ट्रक्टर है।

+0

सी ++ 0x के लिए यह नया है, या यह सी ++ मानक का हिस्सा रहा है? –

+0

@ जिम: वह हिस्सा अपरिवर्तित है। –

+0

यूनियनों में रचनाकार हो सकते हैं? तो कब निर्माण/समस्या नहीं है? –

-7

आप इस तरह की चीज़ को कैसे लागू कर सकते हैं? यहां एक संघ के लिए एक सूचक है, आशा है कि आपको कोई फर्क नहीं पड़ता कि आपको पता नहीं है कि कौन से चर उपयोग करने के लिए सुरक्षित हैं और कौन नहीं हैं।

यूनियन एक मृत भाषा सुविधा वास्तव में वैसे भी हैं- वे लाइब्रेरी-आधारित विधियों जैसे बूस्ट :: संस्करण या बूस्ट :: किसी भी द्वारा पूरी तरह से हटा दिए गए हैं। शून्य * और कार्यात्मक मैक्रोज़ के समान प्रकार - वे अन्य विकल्पों की तुलना में सी ++ में बहुत ही कम उपयोगी होते हैं।

+2

एम्बेडेड दुनिया को न भूलें। कभी-कभी चीजें 100% टाइपएफ़ नहीं होती हैं। –

+0

@ जेसन: एम्बेड किए जा रहे कुछ भी कैसे बदलते हैं? या तो आप जानते हैं कि यह किस प्रकार का है, इसलिए एक नियमित चर का उपयोग करें, आप जानते हैं कि सभी प्रकार संबंधित हैं, इसलिए बहुरूपता का उपयोग करें, या आपको यह जानने की जरूरत है कि आप कुछ भी करने से पहले क्या कर सकते हैं। – Puppy

+5

एंबेडेड भाषा प्रति भाषा के बारे में कुछ भी नहीं बदलता है, लेकिन यह गतिशील स्मृति आवंटन और बहुरूपता (और अधिक बढ़ावा देने के लिए) पर सीमा रखता है जो आपको अन्य तकनीकों की ओर अग्रसर करता है। अक्सर दो 16-बिट # एस और 32-बिट #, या 16- या 32-बिट # और बिटफील्ड के साथ एक स्ट्रक्चर के बीच एक संघ के बीच एक संघ होता है। उन मामलों में संघ के दोनों सदस्यों के पास समान रूप से वैध सामग्री होती है; यह दोनों प्रकार है। –

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