3

私の std::map は次のようになります。

std::map<int, std::string> *myMap = new std::map<int, std::string>[100];

これを削除するにはどうすればよいですか? delete myMap十分ですか?

4

3 に答える 3

7

で100 を割り当てたのでstd::mapnew[]で割り当てを解除する必要がありますdelete[]

delete[] myMap;

すべてのnew/に対して、 /new[]が必要です(それぞれ)。deletedelete[]

于 2013-04-04T16:56:57.597 に答える
2

マップの配列があるので、ほぼ正しいです。delete [] myMapアレイを適切にクリーンアップする必要があります。

しかし、そうしないでください。vector代わりにマップの aを使用します。

std::vector<std::map<int, std::string> > myMap(100);

これにより、すべてのメモリ管理とクリーンアップが自動的に処理されます。

于 2013-04-04T18:19:06.473 に答える
0

boost::scoped_ptr< std::map > myMap = new std::map[100];

boost::scoped_ptr と boost::shared_ptr を使用することを強くお勧めします (メモリ位置が複数の Thigns によってアクセスされている場合)。これらはスマート ポインターであり、多くの利点があります。これらはカスタム デリーターをサポートしているため、メモリ セーフです。つまり、new または new[] を使用して作成したものを削除することを心配する必要はありません。それらはスレッドセーフでもあります。それらの実装はテンプレート化されており、あらゆるタイプなどで動作します。

于 2013-04-04T17:52:09.703 に答える