【发布时间】:2012-09-27 11:48:48
【问题描述】:
我在某处读到(现在找不到源)
MyClass *p1 = new MyClass;
和
MyClass *p2 = new MyClass();
本质上是等价的,前提是MyClass 提供了一个默认构造函数。编译器了解我想要做什么并添加空括号。
如果是这样,为什么不让我写
throw MyException;
但必须使用
throw MyException();
? (是的,行首的问号。)
为了增加一些混乱,C++ FAQ 建议第二个用例 (new MyClass()) 不调用构造函数,而是调用用 operator() 定义的函数。
【问题讨论】:
-
C++ 中一个有趣的怪癖:不能有值初始化的自动对象,也不能有默认初始化的临时对象。