2010-10-10 12 views
8

मैं इस प्रतिलिपि निर्माता को लिख रहा हूं:प्रारंभिक सूची में फ़ंक्शन कॉल करने में कोई समस्या है?

//CCtor of RegMatrix      
RegMatrix::RegMatrix(const RegMatrix &other){ 

    this-> numRow = other.getRow(); 
    this-> numCol = other.getCol(); 

    //Create 
    _matrix = createMatrix(other.numRow,other.numCol); 

    int i,j; 

    //Copy Matrix 
    for(i=0;i<numRow; ++i){ 
     for(j=0;j<numCol; ++j){ 
      _matrix[i][j] = other._matrix[i][j]; 
     } 
    } 
} 

क्या numRow प्रारंभ करने में कोई समस्या है, इस तरह की प्रारंभिक सूची में numCol: numRow(other.numRow), numCol(other.numCol) इसके बजाय:

this-> numRow = other.getRow(); 
this-> numCol = other.getCol(); 

इसके अलावा, मैं नहीं करता पता है कि ऐसी कोई समस्या नहीं है, क्या प्रारंभिक सूची में अन्य वर्गों के ऑब्जेक्ट के फ़ंक्शन को कॉल करने में कोई समस्या है, जैसे:

numRow(other.getRow()) 

इसके बजाय:

this-> numRow = other.getRow(); 

उत्तर

2

नहीं वहाँ कोई समस्या नहीं वास्तव में है। सिवाय इसके कि सावधान रहें कि प्रारंभिकरण का क्रम वह क्रम नहीं है जिसमें आप init-list में प्रारंभकर्ता निर्दिष्ट करते हैं। आदेश वह है जिसमें आपके सदस्यों को कक्षा में घोषित किया गया है। उस संभावित समस्या के अलावा, मैं कोई नहीं देखता हूं। एचटीएच

11

क्या प्रारंभिक सूची में numRow, numCol प्रारंभ करने में कोई समस्या है [...]?

  1. प्रारंभ सूची में वस्तुओं को प्रारंभ करते हैं, वस्तु अभी तक पूरी तरह से निर्माण नहीं कर रहा है:

सामान्य में, वहाँ ऐसा करने के साथ दो समस्याओं है। इसलिए, जब आप गैर स्थैतिक सदस्य फ़ंक्शंस का आह्वान कर रहे हैं, तो आप उन्हें पर आविष्कार कर रहे हैं, अभी तक पूरी तरह से ऑब्जेक्ट नहीं बनाया गया है। यदि वे कार्य उस वस्तु के किसी उप-ऑब्जेक्ट का उपयोग करने का प्रयास करते हैं जिसका निर्माण नहीं किया गया है, तो आप अपरिभाषित व्यवहार का आविष्कार कर रहे हैं।

  • आरंभीकरण के आदेश वर्ग परिभाषा में सदस्यों की घोषणा के आदेश है, यह नहीं वे किस क्रम में प्रारंभ सूची में सूचीबद्ध कर रहे हैं। इसलिए आपको सदस्यों के प्रारंभिकरण पर ध्यान देना होगा जो अन्य सदस्यों से डेटा की आवश्यकता है। (इसे पिछले की उप-समस्या के रूप में देखा जा सकता है: अभी तक निर्मित उप-ऑब्जेक्ट्स का उपयोग नहीं करना।) ऐसी परिस्थितियों से बचने के लिए सबसे अच्छा है, लेकिन अगर उन्हें टाला नहीं जा सकता है, तो सदस्यों को घोषित करने के लिए एक बड़ी, डरावनी टिप्पणी जोड़ें वर्ग की परिभाषा में, उनके आदेश के महत्व पर जोर दिया।
  • अपने ठोस उदाहरण में इस फर्क नहीं पड़ता है, तो आप सुरक्षित यह करने के लिए कर रहे हैं।

    +1

    दूसरे शब्दों में: जब तक आप – valdo

    +0

    @valdo के प्रभावों से अवगत हैं, तब तक कोई समस्या नहीं है: इस बारे में सोचकर, यह हो सकता है कि सदस्य अभी तक पूरी तरह से निर्मित ऑब्जेक्ट पर कार्य नहीं कर रहा है _technically_ _UB_ का कारण बनता है, भले ही वे सदस्य फ़ंक्शन किसी भी अभी तक निर्मित सदस्यों तक नहीं पहुंचता है। मैं इसके बारे में आश्वस्त नहीं हूं।(अभ्यास में, ज़ाहिर है, यह तब तक सुरक्षित है जब तक कि आप किसी भी अभी तक निर्मित गैर-पीओडी ऑब्जेक्ट्स तक नहीं पहुंच पाते हैं।) – sbi

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

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