1. 使用引用传递在方法传参中是比较好的方式,不会新分配内存空间
2. 而如果直接写成像java一样的方式;就会新开辟内存空间,并进行深层拷贝出一个新对象;
所以这是一种值传递,这和java中完全不一样,需要注意;
3. 使用指针互换值只是互换了指针的指向,变量本身的地址不可能被互换,因为地址值是个常量,不可作为左值
指针指向的地址可以变,但是变量的内存中已经分配的地址不可能互换
由图可见,通过指针去访问的话 值变过来了,但是通过变量直接访问的话仍然没有变化;
4. 取地址符和引用符号是同样的,容易混淆,但这两个是完全不同的东西;
像如下这个就是定义变量引用;怎么判断他不是取地址符呢? 因为取地址符加上一个变量就成为一个常量的地址值了,不可能作为左值的,所以这里就是个引用
5.只是使用父类的句柄而非指针去接收一个子类的对象,可以使用到多态吗?
答: 编译没问题,但是不会调用到子类的方法,只会调用到父类的方法; 已本地验证过了;
由此可见,只要涉及到动态绑定的东西c++都是依赖于指针来实现的,这些都是引用传递等场景无法取代的,c++里面的引用作用场景有限不像java中的引用几乎和指针等价;
6. 用new关键字声明出来的变量必须用指针来接收(和java中的一个大区别)
c++定义一个对象,可以不用new关键字,这是分配在了栈上(不用程序员管理内存),也可以使用new关键字(程序员必须使用完后通过delete手动释放掉);
上图可见,new出来的如果不用指针接收会编译报错,而且这里34行注意和java的极大不同是这个34行的变量已经被初始化出来了,它可以直接赋值而不会产生空指针异常(这在java中就是各null),
这种情况不止是对象定义,同样适用stl模板中的容器,比如以下代码在c++中没有任何问题;
vector<int> abc;
abc.push_back();