1

std :: stringstreamポインタがあります:

std::stringstream *stream;

そして私はインスタンスを作成します:

stream = new std::stringstream();

文字列ストリームデストラクタを呼び出すにはどうすればよいですか?以下は失敗します:

stream->~stringstream();

エラーが発生した場合:'('トークンの前にクラス名が必要です。可能であれば、名前空間stdを使用しないでください。ご返信いただきありがとうございます。

4

3 に答える 3

4

これは名前空間とは何の関係もありません。deleteポインタを呼び出すだけです。

delete stream;

しかし、なぜそもそもポインタが必要なのですか?自動ストレージを使用してオブジェクトを割り当てると、オブジェクトが宣言されたスコープを終了すると、オブジェクトは破棄されます。

{
  std::stringstream stream;
} // stream is destroyed on exiting scope.
于 2013-01-28T20:59:29.940 に答える
3

純粋な構文:

{
  using std::stringstream; // make the using as local as possible
  stream->~stringstream(); // without using, impossible
                           // note: this destroys the stream but 
                           //       doesn't free the memory
}

しかし、私は賢明な使用法を考えることができません。この場合、私はむしろ削除を呼び出し、自動ストレージを使用するunique_ptrか、さらに良いことに、自動ストレージを使用します。

明示的なデストラクタ呼び出しはアロケータで役立ちますが、テンプレート化されているため、使用する必要はありません。

于 2013-01-28T20:59:59.303 に答える
1

を呼び出すと、デストラクタが呼び出されますdelete。そのようです:

delete stream;

デストラクタは明示的に呼び出されることを意図していません(ただし、明示的に呼び出すことはできます)。

于 2013-01-28T21:00:27.957 に答える