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


其中aa是一类
最后两句话我是孔子。

最佳答案

第一个不初始化指针。

在最新规范中,


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


也就是说,如果该类(您说过它是一个类)没有构造函数,则第一种形式的作用与局部作用域定义相同,并且未初始化内存。

空的初始化程序将强制无论如何都要对其进行初始化,这将得到与该类型的全局变量相同的结果。

如果一个类仅包含基本类型的数据成员,则该类可能没有构造器,甚至没有隐藏的构造器。您将看到讨论为“ POD”或普通数据。对于模板,发现差异很烦人,因此使用()对所有类型(甚至内置类型)统一使用规则进行了改进。 new int()将给出一个指向值为0的指针。new int将给出一个指向值为该值的指针,该值之前发生在该地址上。

关于c++ - 类对象声明困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29448451/

10-13 09:00