2

標準ライブラリ文字列の配置 new でメモリ リークが発生しています。

以下に、リークが表示されているコードを示します。

string string1("new string");
char _string[sizeof(string)];
new(_string) string(string1);

リークは dbx を使用して検出され、次のように表示されます。

Actual leaks report    (actual leaks:            1  total size:         52 bytes)

  Total     Num of  Leaked     Allocation call stack
  Size      Blocks  Block
                    Address
==========  ====== =========== =======================================
        52       1    0x43f68  operator new < std::basic_string<char,std::char_traits<char>,std::allocator<char> >::__getRep < std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string < main


Possible leaks report  (possible leaks:          0  total size:          0 bytes)

これは本当のメモリ リークですか、それとも dbx がこれをリークと解釈していますか?

4

1 に答える 1

6

配置 new によって作成した文字列オブジェクトのデストラクタを呼び出す必要があります。

std::stringヒープに保存する文字のストレージを割り当てます(ここで求めているカスタムアロケーターを指定しない限り)、それをリークしています。(sizeof(string)は定数であり、文字列に格納されているものには依存しません。)

于 2012-04-27T07:29:07.753 に答える