我在某处读到(现在找不到源)
MyClass *p1 = new MyClass;
和
MyClass *p2 = new MyClass();
本质上是等价的,只要MyClass
提供了一个默认的构造函数。编译器了解我想要做什么并添加空括号。
如果是这样,为什么不允许我写
throw MyException;
但必须使用
throw MyException();
? (是的,一行开头的问号。)
为了增加一些混乱,C++ FAQ建议第二个用例 ( new MyClass()
) 不调用构造函数,而是调用定义的函数operator()
。