はじめに

ある関数内のローカル変数でクラスを実体宣言した場合、コンストラクタとデストラクタはどのタイミングで呼ばれるのでしょうか?

実証コードを書いてみましたのでご確認ください。

サンプルコード

以下のようなサンプルコードを作成します。

Cのコード
#include <stdio.h>

class TestClass
{
    public: TestClass()
    {
        puts("TestClass() が呼ばれました。");
    }

    public: ~TestClass()
    {
        puts("~TestClass() が呼ばれました。");
    }
};

void main()
{
    puts("これからスタック上にクラスのインスタンスを生成します。");
    TestClass tTestClass;
    puts("スコープの終わりに来ると…");
}

実行結果

上記のコードの実行結果は以下の通りです。

実行結果
これからスタック上にクラスのインスタンスを生成します。
TestClass() が呼ばれました。
スコープの終わりに来ると…
~TestClass() が呼ばれました。

結論

実行結果を見てわかるように、ローカル関数内のローカル変数としてクラスを実体宣言した場合、実体宣言したタイミングでインスタンスが生成され、ローカル変数のスコープが終わると自動的にデストラクタが呼ばれます。

よくできてますね。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まさにこれだ
10 (63%)
参考になった
5 (31%)
これじゃない
1 (6%)

【参考になった】 仕様上の参考なんかもあると最高です。 (2017/06/15 Thu 10:12:24)