アフィリエイト広告を利用しています

広告

posted by fanblog

2017年11月07日

《その109》 デストラクタ(p.495演習14-1)


デストラクタ

・クラスオブジェクトが破壊される直前に呼び出されるメンバ関数。
・デストラクタの名前は「 ~クラス名 」とする。
・返却値をもたず、引数も受け取らない。
・動的に確保した領域を開放する等の処理を記述する。


デストラクタの定義例

class IntArray {
int nelem; // 配列の要素数
int* vec; // 先頭要素へのポインタ

public:
explicit IntArray(int size)
: nelem(size), vec(new int[nelem]) { }
// ↑ コンストラクタ … 動的記憶期間を持つ領域を確保

~IntArray() { delete[] vec; }
// ↑ デストラクタ … 動的記憶期間を持つ領域を解放

・・・・・・

};


デストラクタが実行される順序

 データメンバの初期化は、クラス定義の際のデータメンバの宣言順に行われます。
 一方、データメンバが破棄される直前に呼び出されるデストラクタは、クラス定義の際のデータメンバの宣言とは逆の順序で呼び出されます。



新版明解C++入門編 p.495 演習14-1
 デストラクタがデータメンバの逆順に呼び出されることを各難するためのプログラムを作成せよ。

// p495_演習14-1
#include <iostream>
using namespace std;

class Int {
int n_;
public:
Int(int n) : n_(n) {
cout << "コンストラクタ Int /// " << n_ << '\n';
}
~Int() {
cout << "デストラクタ ~Int /// " << n_ << '\n';
}
};

class Abc {
Int a;
Int b;
Int c;
Int d;
public:
Abc(int aa, int bb, int cc, int dd)
: b(bb), d(dd), c(cc), a(aa) { }
~Abc() { }
};

int main() {
Abc abc(1, 2, 3, 4);
cout << "------\n";
}

c14_01.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6942172
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。