मेरे पास एक ऐसी कक्षा है जो अनजाने में गैर-प्रतिलिपि योग्य है (एक थ्रेड, इसलिए कोई प्रतिलिपि नहीं है जो समझ में आता है), और मैं इनमें से एक बड़ा 'सरणी' बनाना चाहता हूं, जैसा कि समान रूप से बनाया गया है गैर-डिफ़ॉल्ट कन्स्ट्रक्टर। ध्यान दें कि सरणी निश्चित आकार है।noncopyable ऑब्जेक्ट्स के "सरणी" का निर्माण
मैं केवल सी ++ सरणी के साथ डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग कर सकता हूं, जब तक कि मैं प्रत्येक को स्वतंत्र रूप से प्रारंभ नहीं करता।
Thread myArray[128]; // uses default constructor - wrong
मैं स्पष्ट रूप से वस्तु निर्माणकर्ता और मानकों को सूचीबद्ध कर सकते हैं, लेकिन यह अत्यधिक शब्द और बदसूरत
Thread myArray[128] = { Thread(params,...), Thread(params,...), ... x 128 ; // ugly
ऐसा लगता है मैं STL वैक्टर का उपयोग नहीं कर सकते क्योंकि वस्तु गैर copyable है - हालांकि वेक्टर घटना आकार कभी नहीं बदलता है। मुझे लगता है कि निर्माता वास्तव में नकल करता है!
std::vector<Thread> myVector(128, Thread(params,...));// won't compile
तरह से मैं हालांकि ऐसा करने का है स्मार्ट संकेत की एक सरणी और एक प्रारंभ पाश के साथ है, लेकिन कुछ शायद मैं याद कर रहा हूँ:
क्या कोई अन्य रास्ता नहीं है - हो सकता है बढ़ावा कंटेनर के साथ , या एक अलग कंटेनर प्रकार?
स्मार्ट-पॉइंटर का उपयोग करने के लिए समझदार चीज़ की तरह लगता है। मुझे नहीं लगता कि एक बेहतर तरीका है। –
यदि वे "समान रूप से निर्मित" हैं, तो क्या आप एक डिफ़ॉल्ट कन्स्ट्रक्टर नहीं जोड़ सकते हैं जो ऐसा करता है? अन्यथा @ Space_C0wb0y के साथ जाएं। –
क्यूटी लाइब्रेरी एक बहुत प्रसिद्ध लाइब्रेरी है, और वे पॉइंटर्स के साथ गैर कॉपी करने योग्य ऑब्जेक्ट्स (जीयूआई विजेट, पूरी तरह से कॉपी करने योग्य) के सरणी संभालती हैं। तो मुझे लगता है कि स्मार्ट पॉइंटर्स जाने का रास्ता हैं। – Fezvez