2012-06-06 16 views
6

'da silmek için doğru yol Sınıfımın kurucusunda bildirilen statik bir harita oluşturmaya çalışıyorum. Bu harita başlatılacak ve bir yöntemle verilerle doldurulacak ve başka bir yöntemde serbest bırakılacaktır. Bunu yapmanın doğru yolu bu mu?Bir haritayı başlatmak ve 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

Kodunuzda 'myMap' statik değil. Aslında "statik" ile ne demek istiyorsun? –

+0

Neden bir haritayı yeni oluşturup daha sonra silmeniz gerektiğini düşünüyorsunuz? Bir haritayı değer bazında tutun ve uygun zamanlarda temizle() öğesini çağırın. –

+0

[sli] etiketini dahil etmeyi düşündüğünüzden şüpheliyim. Yayınınızı [stl] etiketini içerecek şekilde düzenledim. –

cevap

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

Burada myMap bir gösterici değildir, bu nedenle new ile başlatma yanlıştır. Belki aradığınız:

myMap = map<string,a>(); 

kopyalamak için myMap içine varsayılan harita başlatıldı.

İşaretçi olmadığı için (ve aslında) delete myMap'a ihtiyacınız olmadığını unutmayın. Bu bir üye değişkeni ve derleyici sınıfınız yok olduğunda otomatik olarak imha edecek.

+0

Nasıl serbestlerim? – snihalani

+0

@snihalani: Onu serbest bırakmıyorsun, onun bir işaretçisi değil ... belki de tek istediğin "myMap" i harita * 'olarak değiştirmektir? –

+1

@snihalani bunu serbest bırakmaz, C++ 'aClass' öğesi yok edildiğinde onu serbest bırakır – 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 
} 

nesne myMap önce aClass bir örneği içinde mevcut ve ihtiva eden bir örneği oluşturulur, imal edilir. Oluşturmak için new kullanmanıza gerek yoktur, bu değişkenler sadece öbekte bazı örneklere başvurur ve her şey çöp toplanır, bu bir Java ve C# özelliğidir. C++ 'da veri üyelerini bir işaretçi ya da başka bir nesneye gönderme yapmak yerine bir değer yapmak daha kolaydır.

İlgili konular