c++primer 第十三章 拷贝构造函数、拷贝赋值函数、=default、删除函数、析构函数

拷贝构造函数是什么?

拷贝构造函数是用来定义 同类型的另一个对象初始化本对象时,所做的工作。

它的函数写法是

class F{
public:
    F(const F&){};
}:

如果没有定义拷贝构造函数,编译器会定义默认的合成拷贝构造函数。

拷贝赋值运算符:

定义将一个对象赋值给同类型的另一个对象时,所做的类所做的工作。

operator=

class F{
public:
    F& operator=(const &F);
}:

本质其实是函数。

如果没有定义拷贝赋值运算符,编译器会定义默认合成拷贝赋值运算符。

析构函数:

class F{
public:
    ~F();
}

是用来定义对象被删除时所做的工作。

构造函数是用来初始化所有非static成员的。

而析构函数是用来销毁对象的所有非static成员。

析构函数的特点:

  不能被删除,不能被重载,(要是删除析构函数,就无法销毁对象,对象永远保存在内存中,浪费系统资源)。

  当变量离开作用域,调用析构函数;

  当一个对象被销毁时,调用析构函数;

  当一个容器被销毁时,调用析构函数;

  当一个动态分配的对象调用delete时,调用析构函数;

  临时对象被销毁时,调用析构函数。

析构函数一般没有函数体,只有当需要阻止成员被销毁时,需要定义函数体。

如果有析构函数,那么就必须定义相应的拷贝构造函数、拷贝赋值运算符。

如果一个类需要一个拷贝构造函数,那么这个类也一定需要一个拷贝赋值运算符。

=default

将类的成员定义为=default,意味着不用拷贝构造函数,而是显示的要求编译器生成合成拷贝构造函数。

只能对默认的拷贝构造函数使用=default。

=delete

删除函数。这个是为了阻止使用拷贝构造函数而定义的。因为如果不阻止拷贝构造函数,编译器就会调用合成拷贝构造函数,还是会调用,将构造函数定义为删除的,就能够阻止所有的构造函数初始化成员。

删除函数是一种声明了的、但不能使用的函数。

可以指定任何函数为删除的。

除了析构函数之外、、、、要是析构函数也被删除就无法释放被占用的内存!
 

猜你喜欢

转载自blog.csdn.net/dididisailor/article/details/82898239
今日推荐