0
class A
{
public:
A() {}
};

A b;     //global variable

void fun(void)
{
A a;
}

int main()
{
fun();
}

このコードでは、2 つの質問があります (更新)

  1. fun() が main() で呼び出されたとき、つまり実行時またはコンパイル時にオブジェクトのストレージが割り当てられるのはいつですか?

  2. グローバル変数 b の場合、いつストレージが割り当てられ、いつコンストラクターが呼び出されますか?

4

1 に答える 1

3

aの本体に割り当てられたローカル変数ですfun()。AnAは を呼び出すたびにインスタンスfun()化され、オブジェクトがスコープ外になるとインスタンス化が解除されます (破棄され、デストラクタが呼び出されます)。この場合はfun()戻り時です。

Aのコンストラクターは、オブジェクトがインスタンス化されるときに呼び出されます。

これはコンパイル時に発生しません。

于 2012-05-24T19:32:33.997 に答える