2022年12月23日

C++で四苦八苦して楽しいといいのにぃぃぃぃぃ

デストラクタの話。クラスの話の中にある。C++のお勉強中である。「基礎からしっかり学ぶC++の教科書」矢吹・日経BP 2017 2版 である。
ワタクシ NMBと学ぶ君が好きだったのである。今は 基礎からしっかり学ぶ君になったのである。で? 
次のコードを実行して気づいたのである。

#include <iostream>
#include <string>
using namespace std;

struct A {
  ~A() {
    cout << "Aオブジェクトは解体された\n";
  }
};

struct Person {
  string name;
  A* pA;

  //Aオブジェクトをフリーストアに構築するコンストラクタ
  Person(const string& newName) : name(newName), pA(new A) {}

  //Aオブジェクトを解体するデストラクタ
  ~Person() {
     delete pA;
    cout << name << "は解体された\n";
  }
};

int main() {
  Person a1("Taro");
  Person* pA2 = new Person("Jiro");
  delete pA2;

  cout << "End" << endl; // わし入れたこれ
  return 0;

結果↓
Aオブジェクトは解体された
Jiroは解体された
End
Aオブジェクトは解体された
Taroは解体された

   げげ!!  End してReturnしたはずなのに、その後に画面に文字出してきたぞ!!   これはいったいどうしてだ?  プログラム終了時にデストラクタが働きオブジェクトが解体されるってのはこういうことか。
うーーむ。
そういうことにしとこう(´・ω・`)

posted by toinohni at 09:53| 東京 ☀| Comment(0) | ソフト系雑学 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください