在讲解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,接下来我们开始测试:
各位老铁,编译阶段就直接挂掉了,这是为何?
在这里有一个提问:
如果我们在B类里面也做了和A一样的操作,重载=运算符,写B自己的拷贝构造函数,在运行程序,程序会继续运行吗?
答案是:可以的。
为什么呢?
所以肯定是编译器的默认的拷贝构造函数和重载=操作导致的.
编译器默认的拷贝构造函数会自动帮我们调用父类的拷贝构造函数,但是现在的情况是,父类A的拷贝构造函数是私有的,子类很明显是无法调用父类的私有方法的,所以编译肯定无法通过.
这个就是禁止默认拷贝和复制的原理.
在C++ 11中我们引入了delete关键字来帮我们完成这个操作,接下来我们重点理解下delete关键字.