|
发表于 2020-10-25 12:18:31
|
显示全部楼层
本帖最后由 yuxijian2020 于 2020-10-25 13:06 编辑
我看没人回答c++,我来试试吧
首先Student s; //确实创建了1个Student对象,但是并没有初始化,所有没有调用任何构造函数,这里确实只是一个声明 <-- 这里错误,是我胡扯,参考 @大神本人 回答,sorry 这里误导了
其次Student s = new Student(); //这里重新定义了1个对象s(不是指针),想要做new操作并调用构造函数,但是s的类型为Student,new返回的是Student*,这里任何编译器都会报错
再然后如果Student* s = new Student();//这是正确的创建指向Student类型的对象指针,并且通过new成功调用Student()默认构造函数初始化,但是默认构造函数并没有重写,用的是编译器自动生成的默认构造函数,所以还是什么事情都没干
再回答Student s;和Student* s = new Student();的区别
第一个是在栈上创建一个Student类的对象s
后者则是在堆上申请一块40个字节(这里不只40个字节,还有一些因为申请空间造成的额外开销)大小的内存空间(sizeof(Student) = 40(int占4个字节,string占32个字节))
该空间存放一个Student类型的对象,但是因为你调用的默认构造函数什么都没干,所以这块内存空间还没有被初始化
这里你去查看age的值和name的值应该是一串无意义的符号(可能为0,可能不为0) |
|