1

我不小心调用operator delete[]了一个ifstream对象,而不是文件名。我希望编译器会发出错误,因为delete[]只对指针而不是对象进行操作。但是,编译器没有抱怨(甚至没有警告)。

调试时,我看到系统调用operator void*了对象。令人惊讶的是,这甚至不会崩溃(演示)。

所以我想知道:为什么这个运算符首先存在?

是否需要支持if (!file)语法?如果是,为什么不将其转换为安全布尔值或explicit operator bool改用?

4

0 回答 0