C++函数引述传递与值传递的区别,求赐教

C++函数引用传递与值传递的区别,求赐教
1.假设有函数void f(int a)和函数void f(const int& a)

是不是后者的写法更好?因为后者避免了分配内存?

2.见程序:
C/C++ code

class A{
public:
     A(){cout<<"create:"<<this<<endl;};
    ~A(){cout<<"remove:"<<this<<endl;};
};

void f(A b){
    cout<<&b<<endl;
};

int main()
{
    A a ;
    cout<<&a<<endl;
    f(a);
    system("pause");
};


打印出来的结果是:
create:0031F8FB 调用a的构造函数,内存0031F8FB
0031F8FB 打印a的地址0031F8FB
0031F820 打印函数中的b的地址
delete:0031F820 对b析构

这里我很疑惑的是,既然为b分配了内存空间,函数返回时,也调用了b的析构函数
为何没有调用b的构造函数?

请各位朋友指教下小弟。
另外关于这方面指针,数组和内存方面的知识,我可以从哪里获取到相关知识,或者可以推荐两本书给我,
谢谢大家

------解决方案--------------------
1.假设有函数void f(int a)和函数void f(const int& a)
是不是后者的写法更好?因为后者避免了分配内存?

>> 两者的主要区别:
>> a. void f(int a)传递到函数内部的,是a的一份拷贝,void f(const int& a)传递到函数内部的是a的本身
>> b. 由于a所提及的原因,前者会产生一个拷贝,如果(实参)对象比较大的时候,肯定会对内存空间有所要求
>> c. 由于a、b所提及的原因,后者的效率要比前者高
>> 注意:除了引用传递,其它任何方式都会产生拷贝(包括传递指针)

2. 这里我很疑惑的是,既然为b分配了内存空间,函数返回时,也调用了b的析构函数为何没有调用b的构造函数?
>> 上面已经说了:除了引用传递,其它任何方式都会产生拷贝。f(A b)显然不是用引用进行传递的,所以会产
>> 生b的一份拷贝,要产生这个拷贝,就会调用A类的拷贝构造函数,在A中楼主并没有提供拷贝构造函数,但编
>> 译器会自动为你提供一个滴。所以在地址0031F820上的对象是,传入的实参b的一份拷贝,它是有A类的缺省
>> 拷贝构造函数创建的。参考下面的代码:
C/C++ code

#include <iostream>
using namespace std;

class A{
public:
    A(){cout<<"create:"<<this<<endl;}

    A(const A& a)    // 自己增加一个拷贝构造函数,及可以清楚地看到,拷贝构造函数被调用了
    {
        cout << "copy constructor" << endl;
    }

    ~A(){cout<<"remove:"<<this<<endl;}
};

void f(A b){
    cout<<&b<<endl;
};

int main()
{
    A a ;
    cout<<&a<<endl;
    f(a);
    system("pause");
};