whats is the difference between these three statements in c++ ??
aa *obj;
aa *obj1 = new aa;
aa *obj2 = new aa();
其中aa是一个类 我在最后两个声明中表达了自己的想法。
答案 0 :(得分:1)
第一个没有初始化指针。
在最新的规范中,
- 如果省略new-initializer,则默认初始化对象(8.5);如果没有执行初始化, 该对象具有不确定的价值。
- 否则,根据8.5的初始化规则解释new-initializer以进行直接初始化。
也就是说,如果类(你说它是一个类)没有拥有构造函数,那么第一个表单的行为与本地作用域定义相同并留下内存未初始化。
空的初始化程序将强制它被初始化,这会产生与该类型的全局变量相同的结果。
如果一个类只包含基本类型的数据成员,那么它可能没有构造函数,甚至是隐藏的构造函数。您将看到作为" POD"或普通数据进行讨论的内容。对于模板,发现差异很烦人,因此规则经过精炼可以使用(),统一用于任何类型,甚至是内置类型。 new int()
将给出一个指向值为0的指针。new int
将给出一个指向一个值的指针,该值保存之前发生在该地址的垃圾。