2012-06-06 21 views
6

में हटाए जाने का सही तरीका मैं अपनी कक्षा के निर्माता में घोषित एक स्थिर मानचित्र बनाने की कोशिश कर रहा हूं। यह मानचित्र प्रारंभ और एक विधि में डेटा से भरा हुआ है और किसी अन्य विधि में free'd है। क्या यह करने का सही तरीका है?मानचित्र को आरंभ करने और C++

using namespace std; 
#include <map> 

struct a { 
    string b; 
    string c; 
} 

class aClass:public myClass 
{ 
public: 
     aClass(); 
     virtual ~aClass(); 

private: 
     map<string, a> myMap; 
     void method(int a); 
     void amethod(int b); 
} 
void aClass::method(int a) 
{ 
     myMap = new map<string, a>; 
     // Addition of elements; 
} 
void aClass::amethod(int b) 
{ 
     // retrival of elements 
     myMap.clear(); 
     delete myMap; 
} 
+0

आपके कोड में, 'myMap' 'static' नहीं है। वास्तव में "स्थैतिक" से आपका क्या मतलब है? –

+0

आपको क्यों लगता है कि आपको मानचित्र को नया करने और बाद में इसे हटाने की आवश्यकता है? बस मूल्य से मानचित्र रखें, और उचित समय पर स्पष्ट() पर कॉल करें। –

+0

मुझे संदेह है कि आप [स्ली] टैग शामिल करना चाहते थे। मैंने इसके बजाय [stl] टैग को शामिल करने के लिए अपनी पोस्ट संपादित की। –

उत्तर

9
map<string, a> myMap; 
    .... 
    myMap = new map<string, a>; 

यहाँ myMap एक सूचक नहीं है, इसलिए new साथ प्रारंभ सही नहीं है। शायद आप के लिए देख रहे हैं:

myMap = map<string,a>(); 

कॉपी करने के लिए myMap में एक डिफ़ॉल्ट नक्शा प्रारंभ।

ध्यान दें कि आपको कोई संकेत नहीं है (और वास्तव में नहीं) delete myMap, जैसा कि सूचक नहीं है। यह एक सदस्य चर है, और जब आपका वर्ग नष्ट हो जाता है तो संकलक इसे स्वचालित रूप से नष्ट करने का ख्याल रखेगा।

+0

मैं इसे कैसे मुक्त करूं? – snihalani

+0

@ सनीहलानी: आप इसे मुक्त नहीं करते हैं, यह एक सूचक नहीं है ... शायद आप चाहते हैं कि 'myMap' को' मानचित्र * '? –

+1

@ सनीहलानी आप इसे मुक्त नहीं करते हैं, सी ++ इसे मुक्त कर देगा जब युक्त 'एक्लास' नष्ट हो जाएगा – Motti

1
void aClass::method(int a) 
{ 
    myMap.clear(); // ensure it starts off empty 
    // Addition of elements; 
} 
void aClass::amethod(int b) 
{ 
    // retrival of elements 
    myMap.clear(); // maybe not necessary 
} 

वस्तु myMap पहले से ही aClass का एक उदाहरण के अंदर मौजूद है और जब इसकी युक्त उदाहरण का निर्माण किया है का निर्माण किया है। इसे बनाने के लिए आपको new का उपयोग करने की आवश्यकता नहीं है, यह एक जावा और सी # सुविधा है, जहां चर ढेर पर कुछ उदाहरण के संदर्भ हैं और सबकुछ कचरा-संग्रहित है। सी ++ में डेटा सदस्यों को पॉइंटर या किसी अन्य ऑब्जेक्ट के संदर्भ के बजाय मूल्य बनाना आसान होता है।