我听说当我们将相同的地址分配给两个不同的指针时会出现悬空指针问题。这是由于两个指针都指向相同的内存位置,并且如果使用一个指针中的地址释放内存;它仍然可以从第二个指针访问(甚至可以从第一个指针访问,如果未设置为 null,我不讨论这种情况)。
在下面的代码中,我尝试了不同的场景,在这些场景中应该将相同的内存位置分配给不同的指针,但显然在每个场景中它都在分配新的内存。为什么会这样?在每种情况下,都会创建深层副本。
#include<iostream>
using namespace std;
class Player
{
public:
char * name;
char * countryName;
char * gameName;
int age;
Player()
{
}
Player(char * n, char * c, char * g,int a)
{
name=n;
countryName=c;
gameName=g;
age=a;
}
};
void printAddresses(Player p,Player p3)
{
cout<<endl<<&p3<<endl<<&p<<endl;
cout<<endl<<&p3.name<<endl<<&p.name<<endl;
cout<<endl<<&p3.countryName<<endl<<&p.countryName<<endl;
cout<<endl<<&p3.gameName<<endl<<&p.gameName<<endl;
cout<<endl<<&p3.age<<endl<<&p.age<<endl;
}
int main()
{
Player *p2=new Player;
Player *p4=p2;
// p2 is a pointer and p4 is also a pointer initialized from p2. But the following function prints the memory addresses, and it shows that both objects have different memory addresses. And data members also have different memory locations
printAddresses(*p4,*p2);
return 0;
}
我还尝试了很多初始化指针的方案。但在每种情况下,它们似乎都有单独的内存地址,并且相应的数据成员也有不同的内存地址。
那么在这种情况下会出现悬空指针问题吗?或者我怎样才能在这里做一个浅拷贝?这个 c++ 标准/版本(写在下面)是这样的还是我错过了什么?
操作系统:Linux mint 15
g++ --version的输出:
g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3
Copyright (C) 2012 Free Software Foundation, Inc.