16

boost.date_timeを使用して日付/時刻文字列を取得する次の関数を作成しました。

namespace bpt = boost::posix_time;

string
get_date_time_string(bpt::ptime time)
{
  bpt::time_facet * facet(new bpt::time_facet);
  facet->format("%Y%m%d%H%M%S");

  stringstream return_value;
  return_value.imbue(std::locale(std::locale::classic(), facet));
  return_value << time;

  return return_value.str();
}

オブジェクトdeleteの所有権/所有権について簡単な質問がありました。std::locale のコンストラクターは、の所有権/ 'ing について明示的ではありません。-wrapped バージョンとスタック割り当てバージョンの両方を使用してみましたが、どちらもセグ フォールトを引き起こしました。また、valgrind を介して上記の関数を実行してもリークは見られませんでしたが (これはおそらく、ロケールまたはストリームが'ing を処理していることを意味します)、ここで正しいことを行っていることを明確にしたかっただけです。ありがとう。facetdeletefacetshared_ptrfacetdelete

4

1 に答える 1

14

Stroustrupによると、コンストラクターに渡される 0 引数は、が破棄を処理facetすることを伝え、提供されていない場合locale、両方のコンストラクターのbpt::time_facetデフォルトは 0 です。ただし、ゼロ以外の値は、プログラマーが の破棄を明示的に処理する必要があることを意味しますfacet

于 2011-03-16T19:33:48.993 に答える