7

クラスのコンストラクターで宣言された静的マップを作成しようとしています。このマップは、あるメソッドで初期化されてデータで埋められ、別のメソッドで解放されます。これは正しい方法ですか?

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;
 }
4

2 に答える 2

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

これはポインタでmyMapはないため、での初期化newは正しくありません。おそらくあなたは探しています:

  myMap = map<string,a>();

デフォルトの初期化myMapされたマップにコピーします。

delete myMapポインタではないので、必要ない(そして実際にはできない)ことに注意してください。これはメンバー変数であり、クラスが破棄されると、コンパイラが自動的に破棄します。

于 2012-06-06T16:47:48.080 に答える
3
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 ++では、他のオブジェクトへのポインターや参照よりも、データメンバーを値にする方が簡単です。

于 2012-06-06T17:11:23.317 に答える