यह "बुरा" है क्योंकि आप अपना इरादा लागू नहीं कर रहे हैं।
आपका आशय शून्य करने के लिए सरणी में प्रत्येक मान और क्या आप के लिए प्रोग्राम है शून्य करने के लिए कच्चे स्मृति के एक क्षेत्र स्थापित कर रही है स्थापित करने के लिए है। हां, दोनों चीजों का एक ही प्रभाव है लेकिन यह प्रत्येक तत्व को शून्य करने के लिए कोड लिखने के लिए स्पष्ट है।
इसके अलावा, यह अधिक कुशल नहीं है।
; Line 12
xor eax, eax
mov ecx, 1024 ; 00000400H
mov edi, edx
rep stosd
काफी वास्तव में क्या memset संभावना वैसे भी करने के लिए संकलन होता है कौन सा -
class ArrInit
{
public:
ArrInit();
private:
int a[1024];
};
ArrInit::ArrInit()
{
for(int i = 0; i < 1024; ++i) {
a[i] = 0;
}
}
int main()
{
ArrInit a;
}
दृश्य C++ 2008 अनुकूलन के साथ 32 बिट चालू साथ इस संकलन करने के लिए लूप संकलित करता है। लेकिन अगर आप मेमसेट का उपयोग करते हैं तो कंपाइलर के लिए और अधिक अनुकूलन करने के लिए कोई गुंजाइश नहीं है, जबकि आपके इरादे को लिखकर यह संभव है कि संकलक आगे अनुकूलन कर सके, उदाहरण के लिए यह ध्यान दें कि प्रत्येक तत्व बाद में इसे इस्तेमाल करने से पहले किसी अन्य चीज़ पर सेट किया जाता है ताकि प्रारंभिकरण को अनुकूलित किया जा सकता है, जो संभवतः लगभग आसानी से नहीं कर सका अगर आपने मेमसेट का उपयोग किया था।
क्या आप कारण बता सकते हैं कि आपको सी ++ में मेमसेट क्यों नहीं करना चाहिए? मुझे नहीं पता कि मेमसेट क्यों करना सी ++ में किसी भी समस्या का कारण बनना चाहिए। अगर मैं गलत हूं कृपया मुझे सही। धन्यवाद! – Jay
उन्होंने शायद इसे "शून्य-आउट क्लास ऑब्जेक्ट्स में मेमसेट का उपयोग न करें" के संदर्भ में सुना है। –
@Jay: वे ऊपर ठीक है। लेकिन वर्ग ऑब्जेक्ट को शून्य करने के लिए मेमसेट का उपयोग करना (केवल एक सदस्य नहीं) एक अच्छा विचार नहीं है। यह विशेष रूप से problomatic है अगर ऑब्जेक्ट में ऐसे सदस्य होते हैं जिनमें रचनाकार होते हैं (जो कुछ प्रारंभिक कार्य करते हैं)। –