C ++中的构造函数内部的变量声明和赋值

问题描述 投票:0回答:1

对于以下代码:

    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是否不应销毁?

c++ class vector constructor
1个回答
3
投票

是的,vec是一个自动变量,因此其范围仅限于构造函数。因此,它的生存期在退出构造函数时就结束了,并被销毁。

但是,行

this -> vec = vec;

副本分配vec的内容被this->vec中,std::vector的实现对此有所帮助。因此,本地vec会发生什么不再重要,this->vec从现在开始拥有自己的副本。您提到了指针...不涉及指针。只是一些复制。

© www.soinside.com 2019 - 2024. All rights reserved.