C++ 悬空指针
这段代码是否会导致指针悬空。我猜不是C++ 悬空指针,c++,C++,这段代码是否会导致指针悬空。我猜不是 class Sample { public: int *ptr; Sample(int i) { ptr = new int(i); } ~Sample() { delete ptr; } void PrintVal() { cout << "The value is " << *ptr; } }; void SomeFunc(Sample x) { cout << "Say i am in someFunc " &l
class Sample
{
public:
int *ptr;
Sample(int i)
{
ptr = new int(i);
}
~Sample()
{
delete ptr;
}
void PrintVal()
{
cout << "The value is " << *ptr;
}
};
void SomeFunc(Sample x)
{
cout << "Say i am in someFunc " << endl;
}
int main()
{
Sample s1 = 10;
SomeFunc(s1);
s1.PrintVal();
}
类示例
{
公众:
int*ptr;
样本(int i)
{
ptr=新的整数(i);
}
~Sample()
{
删除ptr;
}
void PrintVal()
{
cout是。当您将s1传递给SomeFunc时,将调用Sample的复制构造函数。默认的复制构造函数执行浅层复制,因此ptr将被删除两次。是,正如用户所说
~Sample() {
delete ptr; // Pointer deleted but left dangling
ptr = NULL; // Pointer is no longer dangling
}
但是,请注意,复制该指针所指向的任何指针都将悬空,除非它们也设置为NULL
。当您通过值将对象传递给SomeFunc()时,将进行浅复制,并且在执行后,ptr指向的内存已被删除。。。
因此,当您在s1上调用PrintVal()函数并尝试取消对指针的引用时,您的程序可能会在此阶段崩溃……您可以删除一次指针,它的内存将失控您对悬空指针的定义是什么?