什么时候必须重写拷贝构造函数

1、这里有个简单的规则:如果你需要定义一个非空的析构函数,那么,通常情况下你也需要定义一个拷贝构造函数。

2、有一个原则:一般来说你在类中进行了new操作,你就需要析构函数,在你需要析构函数的类中,一般需要加上挎贝构造函数和赋值函数。

3、拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。

在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):

  1) 一个对象作为函数参数,以值传递的方式传入函数体;

  2) 一个对象作为函数返回值,以值传递的方式从函数返回;

  3) 一个对象用于给另外一个对象进行初始化(常称为复制初始化);

通常的原则是:①对于凡是包含动态分配成员或包含指针成员的类都应该提供拷贝构造函数;②在提供拷贝构造函数的同时,还应该考虑重载"="赋值操作符号。

#include <iostream>
using namespace std;

class CExample {
private:
    int a;
public:
    //构造函数
    CExample(int b)
    { a = b;}
    
    //拷贝构造函数
    CExample(const CExample& C)
    {
        a = C.a;
    }

    //一般函数
    void Show ()
    {
        cout<<a<<endl;
    }
};

int main()
{
    CExample A(100);
    CExample B = A; // CExample B(A); 也是一样的
     B.Show ();
    return 0;
} 

猜你喜欢

转载自blog.csdn.net/weixin_41066529/article/details/89673877