簡體   English   中英

C++ 構造函數中的變量聲明和賦值

[英]Variable declaration and assignment inside a constructor in C++

對於以下代碼:

    class mgraph
    {
        private:
            int n;
            vector <vector <int>> vec;

        public:
            mgraph(int);
            void connect(int, int, int);
            void disconnect(int, int);
            void isconnected(int, int);
            void AddNode();
            void show();
    };

    mgraph::mgraph(int nodes)
    {
        n = ++nodes;
        vector <vector<int>> vec(n, vector<int>(n, 0));
        this -> vec = vec;
    }

為什么分配給 vec (使用此指針)的 vec 不會在構造函數的任務結束后立即銷毀。 這樣做后我得到了所需的值(不是垃圾值),但是在構造函數的任務結束后,在構造函數中創建的向量 vec 不應該被銷毀嗎?

你是對的, vec是一個自動變量,所以它的范圍僅限於構造函數。 它的生命周期因此在退出構造函數時結束並被銷毀。

然而,該行

this -> vec = vec;

副本分配 vec的內容被復制this->vecstd::vector的實現負責處理。 所以本地vec發生了什么不再重要,從現在開始this->vec有自己的副本。

你提到指針......不涉及指針。 只是一些復制。

暫無
暫無

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

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