0

クラス A で動作する関数があります。クラス A はコンストラクターにメモリを割り当て、デストラクタ A::~A() で解放します。

さて、もし。

A someFunc()
{
//This is just to illustrate that it is possible for that variable to be overwritten few times before returning.

A locA;

for(some condition)
{
    //Something something
    A forA(i);
    //Something.
    if(end) locA = forAj;
}

return locA;
}

これでいいですか?そのクラスのデストラクタは、その for ループで再度作成されるたびに呼び出されますか?

4

1 に答える 1

3

そのクラスのデストラクタは、その for ループで再度作成されるたびに呼び出されますか?

はい、変数には自動ストレージがあるため、変数Aの 1 つがスコープ外になるたびに のデストラクタが呼び出されます。

クラスの動作が適切であれば、割り当てられたメモリはA適切に処理されるはずです。Aこれは、適切に動作させるために、適切なコピーコンストラクターとコピー代入演算子も必要であることを意味することに注意してください。

最後のポイントの詳細については、3 のルールを参照してください。

于 2013-10-28T11:20:43.600 に答える