【发布时间】:2020-02-19 16:43:52
【问题描述】:
对于以下代码:
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(使用 this 指针)的 vec 不会在构造函数的任务结束后立即销毁。这样做后我得到了所需的值(不是垃圾值),但是在构造函数中创建的向量 vec 不应该在构造函数的任务结束后被销毁吗?
【问题讨论】:
-
你为什么认为应该将它(
this->vec,如果我理解正确的话)销毁? -
@churill 我猜是因为构造函数就像任何其他函数一样。一旦函数的范围结束,在其中创建的变量(在堆栈中)将被销毁。我猜如果我们说向量在堆中分配内存,那么在构造函数的任务完成后它可能不会被销毁,但我不确定。
-
您也可以使用
mgraph::mgraph(int nodes): vec(n, vector<int>(n)) { ... },这样可以避免复制。
标签: c++ class vector constructor