1

我有一个 std::stringstream 指针:

std::stringstream *stream;

我创建了一个实例:

stream = new std::stringstream();

如何调用 stringstream 析构函数?以下失败:

stream->~stringstream();

出现错误:'(' token 之前的预期类名。如果可能的话,我不想使用using namespace 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 回答