क्या पॉइंटर प्रकार घोषणा में बुलाए जाने वाले "रोकथाम" को रोकने का एकमात्र तरीका है?

मैंने इसकी खोज करने की कोशिश की है, लेकिन मुझे कोई जवाब नहीं मिला है। आइए इसे देखें:

class Foo
{
    Foo();
    Bar a;//'a', the object, gets created (even if I don't want to!)
    Bar* b;//'b', the pointer, gets created, but the object doesn't
}

Foo::Foo()
{
    a = a();//I'd like to create 'a' here instead. This just "replaces" it
    b = new Bar();//'b', the object, gets created
}

मेरा सवाल है: क्या मैं इसे बिना किसी वस्तु के घोषित कर सकता हूं? या क्या मुझे हमेशा पॉइंटर्स का उपयोग करना पड़ता है?

0
आपको क्यों चाहिए होगा? आप क्या हासिल करने का प्रयास कर रहे हैं?
जोड़ा लेखक StoryTeller, स्रोत

1 उत्तर

मेरा सवाल है: क्या मैं इसे बिना किसी वस्तु के घोषित कर सकता हूं?

नहीं।

या क्या मुझे हमेशा पॉइंटर्स का उपयोग करना पड़ता है?

नहीं। Pointers are one option. There are others, such as boost::optional (std::optional is also in the process of standardization). There are also smart pointers (std::unique_ptr or std::shared_ptr). A standardly available, pre-c++11 option which is easier to manage than a raw pointer would be a std::vector where you only ever add one element.

लेकिन क्या आपको पूरी तरह से यकीन है कि आपको इसकी आवश्यकता है?

0
जोड़ा
मुझे वास्तव में किसी भी चीज़ के लिए इसकी आवश्यकता नहीं है, क्योंकि मैं उन परिदृश्यों में सूचक प्रकार का उपयोग कर रहा हूं जहां मुझे सदस्य चर के लिए ऑब्जेक्ट की आवश्यकता होती है जो उदाहरण के लिए एक निश्चित क्रम में बनाई जानी चाहिए। मैं बस यह सोच रहा था। जावा और सी # की दुनिया से आ रहा है, यह काउंटर-अंतर्ज्ञानी लगता है कि एक वस्तु घोषित करने से यह भी शुरू होता है। आपके उत्तर के लिए धन्यवाद।
जोड़ा लेखक manabreak, स्रोत