C ++中Class的隐式成员函数

时间:2013-02-14 05:06:58

标签: c++

C ++中Class的隐式成员函数是: 根据维基: http://en.wikipedia.org/wiki/Special_member_functions

默认构造函数(如果没有显式声明其他构造函数)

如果没有显式声明移动构造函数或移动赋值运算符,则

复制构造函数。如果声明了析构函数,则不推荐生成复制构造函数。

如果没有显式声明复制构造函数,移动赋值运算符或析构函数,则

移动构造函数

如果没有显式声明移动构造函数或移动赋值运算符,则

复制赋值运算符。如果声明了析构函数,则不推荐生成复制赋值运算符。

如果没有显式声明复制构造函数,复制赋值运算符或析构函数,则

移动赋值运算符

析构

根据以下链接:

http://archives.cs.iastate.edu/documents/disk0/00/00/02/43/00000243-02/lcpp_136.html

默认构造函数(即没有参数的构造函数,(第12.1节[Ellis-Stroustrup90]),如果没有声明该类的构造函数(包含任意数量的参数)。

复制构造函数(第12.1节[Ellis-Stroustrup90]),如果没有声明复制构造函数。

析构函数(第12.4节[Ellis-Stroustrup90]),如果没有声明析构函数。

赋值运算符([Ellis-Stroustrup90]的第5.17和12.8节),如果没有声明赋值运算符。

根据以下链接:

http://www.picksourcecode.com/ps/ct/16515.php

默认构造函数

复制构造函数

赋值运算符

默认析构函数

地址运营商

有人可以给出以下代码示例:移动构造函数,复制赋值运算符,移动赋值运算符,赋值运算符,地址运算符 它们被用作隐式成员函数而未明确定义。

由于

1 个答案:

答案 0 :(得分:3)

#include <iostream>

/* Empty struct. No function explicitly defined. */    
struct Elem
{ };

/* Factory method that returns an rvalue of type Elem. */
Elem make_elem()
{ return Elem(); }


int main() {

  /* Use implicit move constructor (the move may be elided
     by the compiler, but the compiler won't compile this if
     you explicitly delete the move constructor): */
  Elem e1 = make_elem();

  /* Use copy assignment: */
  Elem e2;
  e2 = e1;

  /* Use move assignment: */    
  e2 = make_elem();

  /* Use address operator: */    
  std::cout << "e2 is located at " << &e2 << std::endl;

  return 0;
}

上面的示例使用了一个空类。您可以使用具有真实移动语义的数据成员(即移动与复制完全不同的成员)填充它,例如,一个std::vector,您将自动获得移动语义,而无需定义移动构造函数或专门为您的类移动赋值运算符。