2015-04-04 153 views
0
whats is the difference between these three statements in c++ ?? 
aa *obj; 
aa *obj1 = new aa; 
aa *obj2 = new aa(); 

其中aa是一类 我是最后两个声明中的confucion。类对象的声明confucion

+1

其中两个在这里解释:http://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new – chris 2015-04-04 16:02:59

+0

他确实说过是一个类,而不是内置的数据类型。我想这可能是一个POD,但那真的是那些关心的旧编译器。 – 2015-04-04 16:04:30

+0

@JDługosz重要的是语言规范,而不是编译器的年龄。 – juanchopanza 2015-04-04 16:09:24

回答

1

第一个不初始化指针。

在最新的说明书中,

  • 如果省略了新初始化,对象是缺省初始化(8.5);如果不执行初始化,则该对象具有不确定的值。
  • 否则,根据8.5的初始化规则对新初始化器进行解释以进行直接初始化。

也就是说,如果类(你说这是一个类)没有一个构造函数,那么第一种形式将采取同样作为本地范围定义并留下记忆非初始化。

空的初始化程序将强制它初始化,这会得到与该类型的变量全局相同的结果。

如果一个类只包含基本类型的数据成员,那么它可能没有构造函数,即使是隐藏的构造函数。你会看到这个被称为“POD”或简单的数据。对于模板,差异被发现是令人讨厌的,所以规则可以用()统一用于任何类型,甚至内置类型。 new int()将给出一个指向值为0的指针。new int将给出一个指向一个值的指针,该值指示发生在该地址处的任何垃圾。

+0

根据'aa'的定义,第二个和第三个语句的含义可以不同。 – juanchopanza 2015-04-04 16:08:30

+0

我站好了。我知道它发生了变化,但是后退了。 。 – 2015-04-04 16:42:10

+0

任何人都可以在此澄清“第一条语句[aa * obj]初始化指针* obj会自动将类aa对象的地址。现在的问题是 - aa的对象在哪里创建以及它的初始化隐式* obj指针如何? ?因为我刚刚定义了类aa的指针,但没有用一个地址初始化它...... ???? – Gaurav 2015-04-04 17:24:24