C++ Primer Plus读书笔记—— 10.3 类的构造函数与析构函数

关于C++的构造函数的基本知识就不细讲了,可以看看之前博主发的博客。

  • 使用构造函数
class A{
    
    
};
A a;
A a(1,2);//隐式 1
A a = A(1,2);//显式 2 
A *pa = new A(2,3); //动态分配内存 ,也是隐式的 3
  • 一个注意点
    隐式调用默认构造函数时,不要使用括号。
    所谓隐式地调用,就是上面的1 、3 种情况
A aa();  //这没有调用A的默认构造函数,实际上它声明了一个返回A对象的函数
A *pa = new A();  //  不过java中确实是这样的。
  • 关于显式地调用构造函数
    C++标准允许编译器在进行显式地调用构造函数,比如A a = A();的时候用两种方法去实现,一种是和隐式的做法完全等价,一种是先生成一个临时对象(再删除这个“临时”对象),然后复制到左边去。

另外显式地调用构造函数不仅仅用于初始化新对象,还可以将一个新的对象赋给一个变量

class A{
    
    
public:
    int x;
    A(){
    
     x = 0 ;}
    A(int x){
    
     this->x = x; }
    ~A(){
    
     cout<<"析构   x = "<<x<<endl; }
};
int main(){
    
    
    // 下面两句话的含义大不相同的
    A a1 = A(1); 
    a1 = A(9);
    return 0;
}

输出

析构   x = 9 // 临时对象的析构
析构   x = 9 // a1对象的析构
  • 列表初始化
    c++11对列表初始化也是允许的,只要列表中的内容与某个构造函数相匹配
class A{
    
    
public:
    int x, y ;
    A(){
    
     x = 0 ;}
    A(int x){
    
     this->x = x; }
    A(int x,int y){
    
     this->x = x; y = 0 }
    ~A(){
    
     cout<<"析构   x = "<<x<<endl; }
};

A a1 = {
    
    1};
A a2 {
    
    1,2};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/108102593