कारण है कि std::random_device
copyable नहीं है यह है कि अगर यह थे, की नकल की उदाहरण वापस आ सकते हैं मूल रूप की तरह नंबर (यह परिभाषित कार्यान्वयन है, हालांकि)!
इसका कारण यह है (docs):
std::random_device
एक कार्यान्वयन से परिभाषित छद्म यादृच्छिक संख्या इंजन के मामले में लागू किया जा सकता एक गैर नियतात्मक स्रोत (जैसे एक हार्डवेयर डिवाइस) उपलब्ध नहीं है, तो कार्यान्वयन के लिए। इस मामले में प्रत्येक std::random_device
ऑब्जेक्ट समान संख्या अनुक्रम उत्पन्न कर सकता है।
कुछ कार्यान्वयन इस प्रकार एक पीआरएनजी लागू करेंगे। पीआरएनजी आमतौर पर बीज मूल्य (और कुछ अन्य राज्य) के साथ लागू होते हैं, जिससे "यादृच्छिक" संख्याएं उत्पन्न होती हैं। std::random_device
की प्रतिलिपि बनाकर, यह किसी अन्य आंतरिक स्थिति के साथ बीज मान की प्रतिलिपि बनायेगा जो जनरेटर यादृच्छिक संख्या उत्पन्न करने के लिए उपयोग करता है (जिसे कार्यान्वित किया गया है)।
आप 2 यादृच्छिक उपकरणों, जो नियतात्मक हैं होता है क्योंकि वे एक ही नंबर अनुक्रम उत्पन्न:
std::random_device device1;
std::random_device device2 = device1; //For demonstration purposes only
std::uniform_int_distribution dis{ 0, 10 };
int randomNumber1 = dis(device1);
int randomNumber2 = dis(device2);
//Note that "randomNumber1 == randomNumber2"! They use exactly the same random number
//generator with the same seed value, etc. -> Same numbers are generated!
कार्यान्वयन हमेशा हर std::random_device
के लिए एक ही बीज मूल्यों का उपयोग कर सकते हैं, मतलब होगा जो कि अलग-अलग यादृच्छिक उपकरणों के लिए हर बार एक ही संख्या अनुक्रम उत्पन्न होता है। या यह कुछ गैर नियतात्मक स्रोत (ऊपर से लिया गया) का उपयोग हो सकता है:
इस मामले में प्रत्येक std::random_device
वस्तु एक ही नंबर अनुक्रम उत्पन्न हो सकता है।
[...] अगर एक गैर नियतात्मक स्रोत (जैसे एक हार्डवेयर डिवाइस) [...]
उन मामलों में यह बात नहीं है कि यादृच्छिक डिवाइस copyable है (कोई यह नहीं सोचता कि प्रतिलिपि वास्तव में एक प्रतिलिपि है), लेकिन यह है जहां कार्यान्वयन पीआरएनजी का उपयोग करते हुए विभिन्न यादृच्छिक उपकरणों के लिए अलग मान उत्पन्न करता है।
कॉपी कन्स्ट्रक्टर (और कॉपी असाइनमेंट ऑपरेटर) को लागू करने से पीआरएनजी का उपयोग करने वाले कार्यान्वयन के लिए उस धारणा को तोड़ दिया जाएगा, और इसलिए इसे हटाया जाता है, ताकि प्रत्येक कार्यान्वयन के लिए उत्पन्न संख्याओं की "यादृच्छिकता" को बनाए रखा जा सके (जब तक कार्यान्वयन इसे अनुमति देता है)।