类对象声明混淆

时间:2015-04-04 15:59:38

标签: c++ class object

whats is the difference between these three statements in c++ ??
aa *obj;   
aa *obj1 = new aa; 
aa *obj2 = new aa();

其中aa是一个类 我在最后两个声明中表达了自己的想法。

1 个答案:

答案 0 :(得分:1)

第一个没有初始化指针。

在最新的规范中,

  
      
  • 如果省略new-initializer,则默认初始化对象(8.5);如果没有执行初始化,   该对象具有不确定的价值。
  •   
  • 否则,根据8.5的初始化规则解释new-initializer以进行直接初始化。
  •   

也就是说,如果类(你说它是一个类)没有拥有构造函数,那么第一个表单的行为与本地作用域定义相同并留下内存未初始化。

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

如果一个类只包含基本类型的数据成员,那么它可能没有构造函数,甚至是隐藏的构造函数。您将看到作为" POD"或普通数据进行讨论的内容。对于模板,发现差异很烦人,因此规则经过精炼可以使用(),统一用于任何类型,甚至是内置类型。 new int()将给出一个指向值为0的指针。new int将给出一个指向一个值的指针,该值保存之前发生在该地址的垃圾。