0

たとえば、文字列の静的宣言があります

std::string s("test");

メモリは文字列に動的に割り当てられます。文字列sがスコープ外になると、文字列に割り当てられたメモリの割り当てが解除されますか?

の場合にはstd::map

std::map <std::string, std::string> testMap;

同様に、これtestMapもスコープ外になると、のデストラクタstd::stringが呼び出され、文字列のメモリの割り当てが解除されますか?

コメント?前もって感謝します :)

4

3 に答える 3

5

の内部で行われる動的割り当てについて話している場合はstd::string、はい、自動的に割り当てが解除されます。

newを使用して実際のを割り当てる場合は、後でstd::string使用する必要があります。delete

于 2012-12-14T06:07:24.423 に答える
2

標準のC+コンテナを使用する場合、割り当てられたすべてのメモリは自動的に割り当て解除されます。あなたはそれをすることについて心配する必要はありません。

于 2012-12-14T06:07:08.740 に答える
1

すでに投稿されている回答に加えて、メモリ管理にアロケータを使用していることに注意する必要がstd::stringあります。特にこれは、メモリをアロケータに戻した後、システムに直接戻さず、アロケータ(またはSTL実装)に依存した後、システムに戻されるかどうかを意味します。呼び出しシステムのメモリ管理(のような)は十分に重い可能性があるため、一部のアロケータはメモリを返さないため、事前に割り当てられたブロックが存在する場合、次の呼び出しははるかに高速になります。場合によっては、さまざまなツールによって検出される誤ったメモリリークにつながる可能性があります。std::mapdeallocate()malloc()allocate()

于 2012-12-14T06:18:55.210 に答える