2012-06-06 23 views
6

Estoy intentando crear un mapa estático declarado en el constructor de mi clase. Este mapa se debe inicializar y completar con los datos en un método y se debe liberar en otro método. ¿Es esta la forma correcta de hacerlo?Forma correcta de inicializar un mapa y eliminar en 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

En su código, 'myMap' no es' estático'. ¿Qué quieres decir con "estático"? –

+0

¿Por qué crees que necesitas actualizar un mapa y eliminarlo más tarde? Simplemente mantenga un mapa por valor y llame a clear() sobre él en los momentos apropiados. –

+0

Dudo que quisieras incluir la etiqueta [sli]. Edité tu publicación para incluir la etiqueta [stl] en su lugar. –

Respuesta

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

Aquí myMap no es un puntero, por lo que la inicialización con new es incorrecto. Tal vez está buscando:

myMap = map<string,a>(); 

copiar en myMap un defecto inicializado mapa.

Tenga en cuenta que no necesita (y de hecho no puede) delete myMap, ya que no es un puntero. Es una variable miembro, y el compilador se encargará de destruirla automáticamente cuando se destruya tu clase.

+0

¿Cómo lo libero? – snihalani

+0

@snihalani: No lo liberas, no es un puntero ... quizás todo lo que quieras es cambiar 'myMap' para que sea' map * '? –

+1

@snihalani no lo liberas, C++ lo liberará cuando se destruya el 'aClass' que contiene – 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 
} 

El objeto myMap ya existe dentro de una instancia de aClass y se construye cuando se construye su instancia que contiene. No es necesario que use new para crearlo, es una función de Java y C#, donde las variables son solo referencias a alguna instancia en el montón y todo está recolectado. En C++ es más fácil hacer que los miembros de datos sean un valor en lugar de un puntero o referencia a algún otro objeto.

Cuestiones relacionadas