您的位置:首页 > 编程语言 > C语言/C++

C++中的默认函数与default和delete用法

2017-02-22 14:58 267 查看

 在pixhawk拜读中发现如下写法: 

  /* non-copyable */

    OwnPtr(const OwnPtr<T> &other) = delete;

查找的解释如下:



一、类中的默认函数

 

a.类中默认的成员函数

 

1.默认构造函数

 

2.默认析构函数

 

3.拷贝构造函数

 

4.拷贝赋值函数

 

5.移动构造函数

 

6.移动拷贝函数

 

b.类中自定义的操作符函数

 

1.operator

 

2.operator&

 

3.operator&&

 

4.operator*

 

5.operator->

 

6.operator->*

 

7.operator new

 

8.operator delete

 

同时C++规定,一旦程序员实现了这些函数的自定义版本,则编译器不会再自动生产默认版本。注意只是不自动生成默认版本,当然还是可手动生成默认版本的。当我们自己定义了待参数的构造函数时,我们最好是声明不带参数的版本以完成无参的变量初始化,此时编译是不会再自动提供默认的无参版本了。我们可以通过使用关键字default来控制默认构造函数的生成,显式地指示编译器生成该函数的默认版本。比如:

class MyClass

{

  public:

    MyClass()=default;  //同时提供默认版本和带参版本,类型是POD的

    MyClass(int i):data(i){}

  private:

    int data;

};

有些时候我们希望限制默认函数的生成。典型的是禁止使用拷贝构造函数,以往的做法是将拷贝构造函数声明为private的并不提供实现,这样当拷贝构造对象时编译不能通过,C++11则使用delete关键字显式指示编译器不生成函数的默认版本。比如:

class MyClass

{

  public:

    MyClass()=default;

    MyClass(const MyClass& )=delete;

  ......

}

当然,一旦函数被delete过了,那么重载该函数也是非法的,该函数我们习惯上称为删除函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ pixhawk