मैं सी ++ कोड है जो निम्न की तरह कुछ करने पर निर्भर करता है:प्रारंभ स्थिरांक सदस्य चर
class Foo{
bool bar;
bool baz;
Foo(const void*);
};
Foo::Foo(const void* ptr){
const struct my_struct* s = complex_method(ptr);
bar = calculate_bar(s);
baz = calculate_baz(s);
}
शब्दार्थ, बार और baz सदस्य चर, स्थिरांक होना चाहिए, क्योंकि वे प्रारंभ के बाद परिवर्तन नहीं होना चाहिए। हालांकि, ऐसा लगता है कि उन्हें ऐसा करने के लिए, उन्हें उन्हें असाइन करने की बजाय प्रारंभिक सूची में प्रारंभ करना होगा। स्पष्ट होने के लिए, मैं क्यों समझता हूं मुझे ऐसा करने की आवश्यकता है। समस्या यह है, मैं किसी भी तरह निम्नलिखित अवांछनीय चीजों में से एक कर के बिना एक प्रारंभ सूची में कोड परिवर्तित करने के लिए खोजने के लिए प्रतीत नहीं कर सकते हैं: दो बार
- कॉल
complex_method
- जोड़ें (प्रदर्शन के लिए बुरा होगा) फू क्लास के सूचक (वर्ग आकार को अनावश्यक रूप से बड़ा कर देगा)
क्या इन अवांछनीय स्थितियों से बचते समय चर को बनाने का कोई तरीका है?
एक तरफ के रूप में, क्या आप निश्चित हैं कि 'complex_method' सूचक द्वारा वापस आना चाहिए? और यदि ऐसा होता है, तो आपको इसे साफ़ करने की आवश्यकता नहीं है, जो इसे बचाने के लिए 'std :: unique_ptr' का उपयोग करने का सुझाव देता है? – Deduplicator
ठीक है, मैंने ब्रेवटी के लिए उपरोक्त स्निपेट के लिए वास्तविक कोड को सरल बना दिया है। – dooglius
सदस्यों को बनाने से बचें। यदि फू ऑब्जेक्ट नहीं बदला जाना चाहिए, तो इसके बजाय वास्तविक ऑब्जेक्ट कॉन्स बनाएं। –