C++拷贝构造函数

来源:互联网 发布:2002年最火的网络歌曲 编辑:程序博客网 时间:2024/05/22 02:20

当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数:
一个对象以值传递的方式传入函数体 
一个对象以值传递的方式从函数返回 
一个对象需要通过另外一个对象进行初始化。

如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝。位拷贝又称浅拷贝,后面将进行说明。

自定义拷贝构造函数是一种良好的编程风格,它可以阻止编译器形成默认的拷贝构造函数,提高源码效率。

#include <iostream>using namespace std;class CExample{private:        int a;public:        CExample(int b)        {                a = b;        }        CExample(const CExample& C)        {                a = C.a;                cout<<"I'm  the copy construtor founcation!"<<endl;        }        void Show()        {                cout<<a<<endl;        }};int main(){        CExample A(100);        CExample B = A;        B.Show();        return 0;}

深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。


深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源,但复制过程并未复制资源的情况视为浅拷贝。


浅拷贝资源后在释放资源的时候会产生资源归属不清的情况导致程序运行出错。

原创粉丝点击