今天,同事询问一个关于程序中的引用与效率问题,姑且简单解释如下:
1. 引用:变量的一个纯粹的别名;不像java中的引用,java中的引用更像是limited指针;
2. 利用引用传递参数,能避免调用类拷贝构造函数的开销;同理,返回对象的引用,也能避免一次拷贝构造函数调用开销;
当然,返回的是非局部变量的引用,提防局部变量析构所引起的不安全;
3. 何时调用赋值构造函数,何时调用拷贝构造函数?
赋值构造函数是针对已经定义的对象来调用的;
如,A为一定义类
A test(){A a; return a;}, A a1 = test(); 如此则调用一次默认构造函数,一次拷贝构造函数;
A a1; a1 = test(); 则调用2次默认构造函数,一次赋值; 所以注意编码风格和效率问题;
4. STL Iterator也是定义模板类,同样遵循这些法则;
5. STL容器插入类对象时,是采用的拷贝;所以自定义类最好要实现自己的拷贝构造函数和赋值构造函数,否则容易浅拷贝;拷贝是按位拷贝;