我不小心调用operator delete[]
了一个ifstream
对象,而不是文件名。我希望编译器会发出错误,因为delete[]
只对指针而不是对象进行操作。但是,编译器没有抱怨(甚至没有警告)。
调试时,我看到系统调用operator void*
了对象。令人惊讶的是,这甚至不会崩溃(演示)。
所以我想知道:为什么这个运算符首先存在?
是否需要支持if (!file)
语法?如果是,为什么不将其转换为安全布尔值或explicit operator bool
改用?
我不小心调用operator delete[]
了一个ifstream
对象,而不是文件名。我希望编译器会发出错误,因为delete[]
只对指针而不是对象进行操作。但是,编译器没有抱怨(甚至没有警告)。
调试时,我看到系统调用operator void*
了对象。令人惊讶的是,这甚至不会崩溃(演示)。
所以我想知道:为什么这个运算符首先存在?
是否需要支持if (!file)
语法?如果是,为什么不将其转换为安全布尔值或explicit operator bool
改用?