Объявление и присваивание переменной внутри конструктора в C ++ - PullRequest
0 голосов
/ 19 февраля 2020

Для следующего кода:

    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;
    }

Почему ve c, присвоенный ve c (с использованием этого указателя), не будет уничтожен, как только задача конструктора будет завершена. После этого я получил желаемые значения (а не значения мусора), но не должен ли вектор ve c, созданный в конструкторе, уничтожаться после завершения задачи конструктора?

1 Ответ

3 голосов
/ 19 февраля 2020

Вы правы, vec - автоматическая c переменная, поэтому ее область действия ограничена конструктором. Таким образом, его время жизни заканчивается при выходе из конструктора, и оно уничтожается.

Однако строка

this -> vec = vec;

является копией . Содержимое vec копируется в this->vec, об этом заботится реализация std::vector. Так что больше не имеет значения, что происходит с локальным vec, this->vec теперь имеет свою собственную копию.

Вы упоминаете указатели ... указатели не задействованы. Просто копирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...