C++中的拷贝构造函数

2021-01-10  本文已影响0人  CurryCoder

技术交流QQ群:1027579432,欢迎你的加入!

1.拷贝构造函数

2.什么是拷贝构造函数

3.拷贝构造函数的调用时机

3.1 对象以值传递的方式传入作为函数参数

        // 1.对象以值传递的方式传入函数作为参数
        class D{
            private:
                int a;
            public:
                // 构造函数
                D(int b): a(b){
                    cout << "这是D的构造对象...\n";
                }
                // 拷贝构造函数
                D(const D& d_reference){
                    a = d_reference.a;
                    cout << "这是拷贝构造函数...\n";
                }
                // 析构函数
                ~D(){
                    cout << "这是析构函数,删除a = " << a << endl;
                } 
                // 普通成员函数
                void show(){
                    cout << "a = " << a << endl;
                } 
        };

        // 全局函数,传入的函数参数是D的某个对象
        void d_Fun(D d){
            cout << "test D\n";
        }
        D d_obj1(999);
        d_Fun(d_obj1);

3.2 对象以值传递的方式从函数返回

       class E{
       private:
           int a;
       public:
           // 构造函数
           E(int b) : a(b){
               cout << "这是E的构造函数...\n";
           }
           // 拷贝构造函数
           E(const E& e_reference){
               a = e_reference.a;
               cout << "这是E的拷贝构造函数...\n";
           }
           // 析构函数
           ~E(){
               cout << "这是析构函数,删除a = " << a << endl;
           }
           // 普通成员函数
           void show(){
               cout << "a = " << a << endl;
           }
       };

       // 全局函数
       E e_fun(){
           E temp(3);
           return temp;
       }

       int main(){
           e_fun();
           return 0;
       }

3.3 对象需要通过另一个对象来初始化

        C c_obj1(100);
        C c_obj2(c_obj1);  // 类似于C c_obj2 = c_obj1;

4.浅拷贝与深拷贝

4.1 默认拷贝构造函数

4.2 浅拷贝

4.3 深拷贝

4.4 防止默认拷贝的发生

5.拷贝构造函数的几个细节知识

参考文章

上一篇下一篇

猜你喜欢

热点阅读