Dvx*_*Dvx 1 c++ constructor pointers
有人可以告诉我以下代码有什么问题吗?我正在尝试使用类Node实现一个图,该类包含节点id和指向其邻居的指针向量.这是我的代码的简短版本:
#include<vector>
#include<iostream>
using namespace std;
class N {
public:
int i;
vector<N*> v;
N(int i) {
this->i = i;
};
};
int init(N* n1) {
N n2(2);
cout << "pointer " << &n2 << endl;
n1->v.push_back(&n2);
};
int main() {
N n1(1);
init(&n1);
cout << n1.i << endl;
cout << "pointer " << n1.v[0] << endl;
cout << n1.v.at(0)->i << endl;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
问题是在调用init函数之后,似乎节点n2不再存在.
谢谢你的帮助.
因为n2是局部变量,它将在init函数调用后释放.因此,在init函数调用之后,内容驻留在其先前的地址中是未定义的.
要解决此问题,请考虑使用new运算符:
int init(N* n1) {
N* n2 = new N(2);
cout << "pointer " << n2 << endl;
n1->v.push_back(n2);
};
Run Code Online (Sandbox Code Playgroud)
或者干脆
int init(N* n1) {
n1->v.push_back(new N(2));
};
Run Code Online (Sandbox Code Playgroud)
由于您添加的实例是由new运算符创建的,因此您需要使用delete运算符释放它们的内存(例如,在N析构函数中):
~N() {
for (int i = 0; i < v.size(); ++i) {
delete v[i];
}
v.clear();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |