Mel*_*vin 2 c++ heap pointers c++11
我有这张地图:
map<string, Plaats*> plaatsen;
Run Code Online (Sandbox Code Playgroud)
在一个函数中,我将这个地方添加到这个地图:
Plaats * fromPlace = new Plaats(from);
Plaats * toPlace = new Plaats(to);
auto insertedFrom = plaatsen.insert(pair<string,Plaats*>(from,fromPlace));
auto insertedTo = plaatsen.insert(pair<string,Plaats*>(to,toPlace));
//delete from or to if they are not inserted
if(!insertedFrom.second){
delete fromPlace;
}
if(!insertedTo.second){
delete toPlace;
}
Run Code Online (Sandbox Code Playgroud)
如果元素添加到我的地图中,我需要在析构函数中删除它.
KortstePad::~KortstePad(){
//delete every item in plaatsen
for(pair<string,Plaats*> place : plaatsen){
//Plaats *p = place.second;
delete place.second;
place.second = nullptr;
}
for(pair<string,Plaats*> place : plaatsen){
Plaats *p = place.second;
cout << (p == nullptr) << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
看来我的代码没有删除我的地方,因为这是程序的输出:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Run Code Online (Sandbox Code Playgroud)
为什么这段代码没有设置指向nullptr的指针?我是否将局部变量设置为nullptr?
您应该在循环中使用对值类型的元素的引用,而不是使用副本.例如
for ( pair<const string,Plaats*> &place : plaatsen){
//Plaats *p = place.second;
delete place.second;
place.second = nullptr;
}
Run Code Online (Sandbox Code Playgroud)
还要考虑到密钥应具有限定符const pair<const string,Plaats*>.