对于以下代码:
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->vec中,std::vector
的实现对此有所帮助。因此,本地vec
会发生什么不再重要,this->vec
从现在开始拥有自己的副本。您提到了指针...不涉及指针。只是一些复制。