在讲解delete关键字之前,我们先说说最早之前我们是如何禁止拷贝构造函数的!

把delete关键字引入的前因后果都深入的理解一下 !

class A {
    
public:
    A(){}
  
private:
    
    //拷贝构造函数
    A(const A& other) {
        cout << "copy construcor" << endl;
    }
    
    void operator=(const A& other) {
        cout << "copy function" << endl;
    }
    
};

class B : A{
public:
    B(){}
};

(当我们自己实现了拷贝构造函数的时候,叫深层拷贝,这个时候编译器自动帮我们生成默认的构造函数了,所以我们需要自己手动添加一下)

B继承于A,接下来我们开始测试:

C++11 delete关键字 禁止默认拷贝构造函数和复制操作

各位老铁,编译阶段就直接挂掉了,这是为何?

在这里有一个提问:

如果我们在B类里面也做了和A一样的操作,重载=运算符,写B自己的拷贝构造函数,在运行程序,程序会继续运行吗?

答案是:可以的。

为什么呢?

所以肯定是编译器的默认的拷贝构造函数和重载=操作导致的.

编译器默认的拷贝构造函数会自动帮我们调用父类的拷贝构造函数,但是现在的情况是,父类A的拷贝构造函数是私有的,子类很明显是无法调用父类的私有方法的,所以编译肯定无法通过.

这个就是禁止默认拷贝和复制的原理.

在C++ 11中我们引入了delete关键字来帮我们完成这个操作,接下来我们重点理解下delete关键字.

相关文章:

  • 2022-12-23
  • 2021-09-17
  • 2021-11-07
  • 2022-12-23
  • 2021-07-23
  • 2021-09-25
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-20
相关资源
相似解决方案