C++ 在C+;中初始化映射和删除的正确方法+;

C++ 在C+;中初始化映射和删除的正确方法+;,c++,data-structures,stl,map,C++,Data Structures,Stl,Map,我试图创建一个在类的构造函数中声明的静态映射。 此映射将在一个方法中初始化并填充数据,在另一个方法中释放。 这是正确的方法吗 using namespace std; #include <map> struct a { string b; string c; } class aClass:public myClass { public: aClass(); virtual ~aClass(); private: m

我试图创建一个在类的构造函数中声明的静态映射。 此映射将在一个方法中初始化并填充数据,在另一个方法中释放。 这是正确的方法吗

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;
 }
使用名称空间std;
#包括
结构a{
b串;
字符串c;
}
类aClass:公共myClass
{
公众:
aClass();
虚拟~aClass();
私人:
地图我的地图;
无效法(INTA);
无效方法(int b);
}
void aClass::方法(int a)
{
myMap=新地图;
//添加元素;
}
void aClass::amethod(intb)
{
//元素检索
myMap.clear();
删除myMap;
}
将默认初始化的映射复制到
myMap

请注意,您不需要(实际上也不能)删除myMap,因为它不是指针。它是一个成员变量,当类被销毁时,编译器会自动销毁它

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
来创建它,这是一个Java和C#特性,其中变量只是对堆上某个实例的引用,所有内容都是垃圾收集的。在C++中,让数据成员成为一个值,而不是指向某个对象的指针或引用更容易。

@ Shanala:你不释放它,它不是指针…也许你想改变的是<代码> MYMAP < /C> >是代码>地图*< /Cord>?@ SnHalaNy你不释放它,C++将在包含<代码> AcLass<代码>被破坏时释放它,这个将被使用多次,大约200次,这个代码的正确性没有问题,对吗?但是,在
方法中重新初始化映射似乎毫无意义,因为它可能已经被清除。在您的代码中,
myMap
不是
静态的。你所说的“静态”到底是什么意思?为什么你认为你需要重新创建一个地图并在以后删除它?只需按值保存一个映射,并在适当的时间对其调用clear()。我怀疑您是否打算包含[sli]标记。我编辑了你的文章,加入了[stl]标签。
  myMap = map<string,a>();
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
}