class A{
//
};
class B{
private:
A* a;
public:
void fun(A* a);
//
};
- 如A类的成员变量含有B类的对象,那么每个A类对象产生或拷贝都要产生一次B类对象的构造或者拷贝,对象占的空间比较大,对象拷贝比较消耗内存。如果换成B类的指针,A类对象拷贝,也只会产生4个字节(32位操作系统)或者8个字节(64位操作系统)的拷贝。
- 传指针(和引用)是非常快的,A* a这种形式 在传参数的时候,会首先调用类A的赋值构造函数。而fun(A* a)则只需要传递一个4字节的地址即可。
- fun(A* a)在它的函数体内改变a指向的对象,则源对象被改变。fun(A a)在函数体内改变a对象,源对象不被改变,亦即实参不被改变,被改变的只是副本。
- C++的多态特性只能建立在指针和引用的基础之上,不能想Java那样直接建立在对象基础之上。