2017-12-18 5 views
-1

したがって、次のように記述します。私は非常に単純なHashMapを実装していますが、HashEntryクラスも簡単に定義されています。新規またはMalloc/Calloc/etcを使用しないC++の初期化

私はC++の経験が豊富ではありませんが、新しい、削除、malloc/free/realloc/etcが原因でシステムがクラッシュし、コードを修正する必要があります。私は本当にどのようにこれらのツールなしでコンストラクタとデコンストラクタを処理するか分からない。

私はこれのように初期化することができます:string program(sizeVariable)の文字列を知っていますが、私は実際にこの行でそれを行う方法を見ていませんtable = new HashEntry*[TABLE_SIZE];そして、脱構築。

私のIDEで見た目が醜いような書式も許されています。新、削除のmalloc /無料/ reallocのは/ etc

class HashMap { 
    private: 
     HashEntry **table; 
    public: 
     HashMap() 
     { 
      table = new HashEntry*[TABLE_SIZE]; 
      for (int i = 0; i < TABLE_SIZE; i++) 
       table[i] = NULL; 
     } 
    ... 
     ~HashMap() 
     { 
      for (int i = 0; i < tableSize; i++) 
       if (table[i] != NULL) 
        delete table[i]; 
      delete[] table; 
     } 

} 
+1

なぜ、スマートポインタの 'std :: vector'を使用していないのか、まともな例外処理が熟考する価値があるのですか? – WhozCraig

+1

投稿されたコードは私には大丈夫です。ただし、[The Rule of Three](https://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)をチェックしてください。 –

+0

@RSahu:どのようにあなたによく見える? C++での手動メモリ管理は、特に2D配列のような単純なものでは、コードの匂いです。また、ゼロのルールが推奨です。手動のメモリ管理を行う場合は、3つのルールではなく、5つのルールから開始する必要があります。 –

答えて

1

すべて

あなたはC++でそれらのいずれかを使用することはほとんどないはずです。手作業によるメモリ管理は、日々のC++開発のためにはかなり致命的です。このようunique_ptrshared_ptrなど

  • スマートポインタ:多くのより良い選択肢があります。

  • またはstd::arrayのようなコンテナ。

あなたは良いModern C++入門書を読む必要があります。 "A Tour of C++"で始まります。


あなたが(なぜ?...)マニュアルリソース管理を行っている場合は、rule of fiveをフォローしたいです。

+0

ありがとう、ええと私はC++で受けた指示がちょっと古風な –

関連する問題