したがって、次のように記述します。私は非常に単純な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;
}
}
なぜ、スマートポインタの 'std :: vector'を使用していないのか、まともな例外処理が熟考する価値があるのですか? – WhozCraig
投稿されたコードは私には大丈夫です。ただし、[The Rule of Three](https://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)をチェックしてください。 –
@RSahu:どのようにあなたによく見える? C++での手動メモリ管理は、特に2D配列のような単純なものでは、コードの匂いです。また、ゼロのルールが推奨です。手動のメモリ管理を行う場合は、3つのルールではなく、5つのルールから開始する必要があります。 –