簡體   English   中英

C++:構建和銷毀 static 內部 class 實例在外部 ZA2F2ED4F8EBC2CBB4C21A29DC40AB6

[英]C++: construction and destruction of static inner class instance in outer class

我是 C++ 的新手並學習嵌套類和 static class 成員 ZF6F87C9FDCF18B3C3C9ZEE,I 如下:

#include <iostream>

using namespace std;

class Outter
{
public:
    Outter() {
        //get();
        cout << "construct Outter" << endl;
    }
    ~Outter() {
        cout << "destruct Outter" << endl;
    }
private:
    class Inner
    {
    public:
        Inner() {
            cout << "construct Inner" << endl;
        }
        ~Inner() {
            cout << "destruct Inner" << endl;
        }
    };
    //Inner get() {
    //    return i;
    //}
    static Inner i;
};

int main() {
    Outter o;
    return 0;
}

我在外部 ZA2F2ED4F8EBC2CBB1C21A29DC4AB 中制作內部 class 的內部 class 和 static 實例。 當我在沒有get() function 的情況下運行此代碼時,結果 output 是:

construct Outter
destruct Outter

然后我刪除get() function 的注釋並在Outter()中調用它,我重新運行程序, output 變為:

destruct Inner
construct Outter
destruct Outter

我對這個結果感到困惑,因為據我了解,在destruct Inner destruct Inner之前應該有一個construct Inner ,而在destruct Outter之后應該有 destruct Inner 。 有人可以解釋這里發生了什么嗎?

output 不是您所期望的,因為Inner i; 調用get時已經構建。

發生的情況如下: 1. 在get中,您得到一個 static 實例到i ,這是一個復制操作,這里沒有默認構造。 3. 您返回一個臨時復制Inner object,它立即被破壞,因此destruct Inner

我想, Outer是不言而喻的。 你構造它,當它超出 scope 時,它就會被破壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM