1

私は次の方法を書きました:

void ShowInfo::show_time(){
  time_t rawtime;
  struct tm *ti;

  time ( &rawtime );
  ti = localtime ( &rawtime );

  std::cout << std::setw(2) << ti->tm_hour << ":"
            << std::setw(2) << ti->tm_min << ":"
            << std::setw(2) << ti->tm_sec;
}

メモリを解放するために struct ti を削除する必要がありますか、それともメソッドが終了すると削除されますか?

また、削除する必要がある場合は、どうすればよいですか?

4

2 に答える 2

6

ドキュメントでこれを確認する必要があります。Google でざっと検索すると、次のことがわかります。

[http://en.cppreference.com/w/cpp/chrono/c/localtime]:

戻り値: 成功時の静的内部 std::tm オブジェクトへのポインタ

[http://msdn.microsoft.com/en-us/library/aa246456(v=vs.60).aspx]

備考: gmtime、mktime、および localtime はすべて、変換のために静的に割り当てられた単一の tm 構造体を使用します。

そのため、動的割り当てが行われていないように思われるため、メモリをシステムに解放する必要はありません。

実際の答えよりも、メモリ管理関数のインターフェイスの一部であり、文書化する必要があることを理解する必要があります。ドキュメントは、この情報を探す最も簡単な場所です。特に、メモリを解放する必要がある場合は、ドキュメントで確実に指摘されます。

于 2012-09-04T01:09:35.587 に答える
1

いいえ、必要ありません。構造体struct tmは静的に割り当てられるため、freein を呼び出すべきではありません。

于 2012-09-04T01:09:12.823 に答える