• 8、关于复制构造函数和析构函数的又一个例子


    #include <iostream>
    using namespace std;
    class CMyclass {
    	public:
    	CMyclass() {};//无参构造函数
    	CMyclass( CMyclass & c){ //复制构造函数
    	cout << "copy constructor" << endl;
    	}
    	~CMyclass() { cout << "destructor" << endl; }//析构函数
    };
    
    void fun(CMyclass obj_ )
    {
    	cout << "fun" << endl;
    }
    CMyclass c;
    CMyclass Test( )
    {
    	cout << "test" << endl;
    	return c;
    }
    int main(){
    	CMyclass c1; 	//创建c1,并调用无参构造函数初始化c1
    	fun( c1);		//创建形参obj_ ,调用复制构造函数,将实参c1的值复制到形参obj_ 中		
    	Test();
    	return 0;
    }
    /*
    输出结果:
    copy constructor				调用复制构造函数初始化:fun()形参obj_
    fun								执行fun
    destructor 						//形参obj_消亡
    test							进入Test()
    copy constructor				构造一个临时对象,调用复制构造函数,将全局变量c的内容复制到这个临时对象中(初始化)
    destructor 						//Test();调用结束, 返回值临时对象消亡 
    destructor 						// 局部变量消亡
    destructor 						// 全局变量消亡
    */
    

    关于使用构造函数考虑的点:
    (1)见到创建对象的句子:
    考虑:先创建对象,
    创建对象时使用参数:带参数的构造函数初始化该对象。
    创建对象时没有使用参数初始化:使用不带参数的构造函数初始化该对象。
    (2)见到函数返回一个对象的句子:
    考虑:调用该函数时,返回语句一定会创建一个临时对象,这个临时对象使用复制构造函数进行初始化,将返回的值复制给这个临时对象。
    (3)函数的形参为类对象的句子:
    调用该函数时,一定会创建一个形参对象,该形参对象使用复制构造函数或者使用转换构造函数进行初始化。
    (3)见到为对象赋值的句子:
    等号两边类型相同:将右边赋值给左边。
    等号两边类型不同:等号右边是否有课匹配的转换构造函数,如果有,将其转换为一个临时的对象,然后赋值给左边。

  • 相关阅读:
    【solr专题之三】Solr常见异常
    python清除数据库错误日志
    【LeetCode OJ 136】Single Number
    ZOJ 1649 Rescue(有敌人迷宫BFS)
    HDU 1885
    hdu 2594 Simpsons’ Hidden Talents
    _DataStructure_C_Impl:链串
    Errors occurred during the build. Errors running builder &#39;Integrated External Tool Builder&#39; on proje
    logo切图大小相应的尺寸
    再记作品展
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764282.html
Copyright © 2020-2023  润新知