हाँ। एसटीएल कंटेनरों में मूल्यों को कॉपी शब्दार्थ बनाए रखने की आवश्यकता है। IOW, उन्हें आदिम प्रकार (जैसे int) का व्यवहार करने की आवश्यकता है, जिसका अर्थ है, अन्य चीजों के बीच, उन्हें डिफ़ॉल्ट-रचनात्मक होना चाहिए।
इसके (और अन्य आवश्यकताओं के बिना) एसटीएल कंटेनरों को लागू करने वाले डेटा संरचनाओं पर विभिन्न आंतरिक कॉपी / चाल / स्वैप / संचालन की तुलना करना मुश्किल होगा।
C ++ मानक के संदर्भ में, मुझे लगता है कि मेरा उत्तर सटीक नहीं था। डिफ़ॉल्ट-निर्माण वास्तव में, आवश्यकता नहीं है :
20.1.4.1 से:
डिफ़ॉल्ट निर्माता की आवश्यकता नहीं है। कुछ कंटेनर क्लास सदस्य फ़ंक्शन हस्ताक्षर डिफ़ॉल्ट तर्क के रूप में डिफ़ॉल्ट निर्माता को निर्दिष्ट करते हैं। टी () एक अच्छी तरह से परिभाषित अभिव्यक्ति होनी चाहिए ...
इसलिए, कड़ाई से बोलते हुए, आपके मूल्य प्रकार को केवल डिफ़ॉल्ट रूप से रचनात्मक होने की आवश्यकता होती है यदि आप कंटेनर के एक फ़ंक्शन का उपयोग करते हैं जो अपने हस्ताक्षर में डिफ़ॉल्ट निर्माणकर्ता का उपयोग करता है।
वास्तविक आवश्यकताएं (23.1.3) एसटीएल कंटेनरों में संग्रहीत सभी मूल्यों से हैं CopyConstructibleऔर Assignable।
विशेष रूप से कंटेनरों के लिए अन्य विशिष्ट आवश्यकताएं भी हैं, जैसे कि होना Comparable(उदाहरण के लिए मानचित्र में कुंजियाँ)।
संयोग से, निम्न कोमो पर कोई त्रुटि नहीं है :
#include <map>
class MyClass
{
public:
MyClass(int t);
};
int main()
{
std::map<int, MyClass> myMap;
}
तो यह एक जी ++ समस्या हो सकती है।