我有一个 std::stringstream 指针:
std::stringstream *stream;
我创建了一个实例:
stream = new std::stringstream();
如何调用 stringstream 析构函数?以下失败:
stream->~stringstream();
出现错误:'(' token 之前的预期类名。如果可能的话,我不想使用using namespace std。提前感谢您的回复。
我有一个 std::stringstream 指针:
std::stringstream *stream;
我创建了一个实例:
stream = new std::stringstream();
如何调用 stringstream 析构函数?以下失败:
stream->~stringstream();
出现错误:'(' token 之前的预期类名。如果可能的话,我不想使用using namespace std。提前感谢您的回复。
这与命名空间无关。您只需调用delete
指针:
delete stream;
但是为什么你首先需要一个指针?如果您分配一个具有自动存储的对象,它将在退出它声明的范围时被销毁:
{
std::stringstream stream;
} // stream is destroyed on exiting scope.
纯语法:
{
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
或者更好的是,使用自动存储。
显式析构函数调用在分配器中很有用,但它们是模板化的,因此不需要使用。
调用时将调用析构函数delete
。像这样:
delete stream;
析构函数并不意味着显式调用(尽管您可以这样做)。