码迷,mamicode.com
首页 > 编程语言 > 详细

深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结

时间:2015-10-25 19:26:40      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

转自 http://www.jb51.net/article/37527.htm,感谢作者

 #include "stdafx.h"  
    #include <iostream>  
    using namespace std;  
    class B  
    {  
    public:  
        B():data(0)    //默认构造函数  
        {   
            cout << "Default constructor is called." << endl;  
        }  
        B(int i):data(i) //带参数的构造函数  
        {  
            cout << "Constructor is called." << data << endl;  
        }  
        B(B &b)   // 复制(拷贝)构造函数  
        {  
            data = b.data; cout << "Copy Constructor is called." << data << endl;  
        }  
        B& operator = (const B &b) //赋值运算符的重载  
        {  
            this->data = b.data;  
            cout << "The operator \"= \" is called." << data << endl;  
            return *this;  
        }  
        ~B() //析构函数  
        {  
            cout << "Destructor is called. " << data << endl;  
        }  
    private:  
        int data;  
    };  

    //函数,参数是一个B类型对象,返回值也是一个B类型的对象  
    B fun(B b)  
    {  
        return b;  
    }  

    //测试函数  
    int _tmain(int argc, _TCHAR* argv[])  
    {  
        fun(1);  
        cout << endl;  

        B t1 = fun(2);  
        cout << endl;  

        B t2;  
        t2 = fun(3);  

        return 0;  
    }  

 

Constructor is called.1             //用1构造参数b     
    Copy Constructor is called.1      //用b拷贝构造一个临时对象,因为此时没有对象来接受fun的返回值     
    Destructor is called. 1            //参数b被析构     
    Destructor is called. 1             //临时对象被析构  
    Constructor is called.2                  //用2构造参数b        
    Copy Constructor is called.2           //用b拷贝构造t1,此时调用的是拷贝构造函数     
    Destructor is called. 2                  //参数b被析构  
    Default constructor is called.             //调用默认的构造函数构造t2        
    Constructor is called.3                       //用3构造参数b        
    Copy Constructor is called.3             //用b拷贝构造一个临时对象        
    Destructor is called. 3                        //参数b被析构        
    The operator "= " is called.3              //调用=操作符初始化t2,此时调用的是赋值操作符     
    Destructor is called. 3                         //临时对象被析构        
    Destructor is called. 3                         //t2被析构        
    Destructor is called. 2                         //t1被析构        
    请按任意键继续. . .  

 

深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结

标签:

原文地址:http://www.cnblogs.com/guxuanqing/p/4909280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!