在new对象的时候有加上(),有不加(),不知道这个到底是什么区别?
很多人都说,加括号调用没有参数的构造函数,不加括号调用默认构造函数或唯一的构造函数。这是有问题的。 对于自定义类类型: 如果该类没有定义构造函数(由编译器合成默认构造函数)也没有虚函数,那么class c = new class;将不调用合成的默认构造函数,而class c = new class();则会调用默认构造函数。 如果该类没有定义构造函数(由编译器合成默认构造函数)但有虚函数,那么class c = new class;和class c = new class();一样,都会调用默认构造函数。 如果该类定义了默认构造函数,那么class c = new class;和class c = new class();一样,都会调用默认构造函数。
对于内置类型: int *a = new int;不会将申请到的int空间初始化,而int *a = new int();则会将申请到的int空间初始化为0。 以下两个语句的区别是:第一个动态申请的空间里面的值是随机值,第二个进行了初始化,里面的值为0:
结论:别使用不带括号的new。 class A{ A *a1=new A; cout<<a2->a<<endl; //输出0 A a3; 如果加上一个virtual,如virtual ~A(){}, 则 cout<<a1->a<<endl; //输出:-842150451 cout<<a2->a<<endl; //输出 -842150451 -------------下面是网上找的帖子,对理解上面的现象可能会有帮助------------------- 一个类满足下列其中任何一个条件: --------------帖子到这里over---------------------------------------------------- |