विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

C++ मेंबर इनिशियलाइज़र लिस्ट ध्यान देने योग्य बातें

C++ में, क्लास का सही इनिशियलाइज़ेशन प्रोग्राम के सही चलने को सुनिश्चित करने की कुंजी-कदमों में से एक है। ख़ासकर इनिशियलाइज़र लिस्ट का उपयोग करते समय, हमें कुछ संभावित जालों पर ध्यान देना होता है, ताकि कोड निष्पादन के दौरान अनपेक्षित परिणाम न उत्पन्न हों।

इनिशियलाइज़र लिस्ट को आमतौर पर नए क्लास इंस्टेंस की स्थिति सेट करने का पसंदीदा तरीका माना जाता है, क्योंकि यह क्लास मेंबर्स को इनिशियलाइज़ करने का संक्षिप्त और कुशल तरीका देती है। हालाँकि, कभी-कभी इनिशियलाइज़र लिस्ट में दूसरे मेंबर वेरिएबल को refer करने से कुछ उलझाने वाली समस्याएँ हो सकती हैं।

समस्या का उदाहरण

निम्नलिखित Foo क्लास पर विचार करें:

#include <iostream>

class Foo
{
public:
  Foo(int size) : size_(size),
                 capacity_(size_ + 2),
                 length_(capacity_)
  {}

  void print() {
    std::cout << "Size: " << size_ << " Capacity:  " << capacity_ << " Length: " << length_  << std::endl;
  }

private:
  int length_;
  int capacity_;
  int size_;
};

int main() {
  Foo foo(50);
  foo.print();
}

इस उदाहरण में, हम इनिशियलाइज़र लिस्ट में दूसरे मेंबर वेरिएबल्स को refer करके length_, capacity_ और size_ को इनिशियलाइज़ करने की कोशिश कर रहे हैं। हालाँकि, क्योंकि क्लास मेंबर्स का इनिशियलाइज़ेशन क्रम उनके क्लास में डिक्लेयर होने के क्रम पर चलता है, हो सकता है कि length_ और capacity_ हमारी अपेक्षा के अनुसार इनिशियलाइज़ न हों।

कैसे हल करें?

इस समस्या से बचने के लिए, निम्नलिखित बिंदुओं का पालन करें:

1.इनिशियलाइज़र लिस्ट में दूसरे मेंबर वेरिएबल्स को refer करने से बचें

2.क्रम की निरंतरता: मेंबर वेरिएबल्स का इनिशियलाइज़ेशन क्रम उनके क्लास में डिक्लेयर होने के क्रम पर होता है

सुधार का उदाहरण:

#include <iostream>

class Foo
{
public:
  Foo(int size) : size_(size),
                 capacity_(size_ + 2),
                 length_(calculateLength(size_))
  {}

  void print() {
    std::cout << "Size: " << size_ << " Capacity:  " << capacity_ << " Length: " << length_  << std::endl;
  }

private:
  int calculateLength(int size) {
    return size + 2;
  }

private:
  int size_;
  int capacity_;
  int length_;
};

int main() {
  Foo foo(50);
  foo.print();
}

संबंधित विषय

टिप्पणियाँ