5

C++ のクラスの暗黙的なメンバー関数は次のとおりです。 wiki によると: 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

デフォルトのコンストラクタ

コピーコンストラクター

代入演算子

デフォルトのデストラクタ

アドレス演算子

コンストラクターの移動、代入演算子のコピー、代入演算子の移動、代入演算子、 暗黙のメンバー関数として使用され、明示的に定義されていないアドレス演算子のコード例を教えてください。

ありがとう

4

1 に答える 1

4
#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;
}

上記の例では、空のクラスを使用しています。実際の移動セマンティクスを持つデータ メンバー (つまり、移動がコピーとはまったく異なるメンバー)、たとえば astd::vectorで埋めることができ、移動コンストラクターやクラス専用の移動代入演算子を定義しなくても、移動セマンティクスを自動的に取得できます。

于 2013-02-14T05:17:27.513 に答える