Friend函数析构指针,我仍然可以使用指针访问类的函数。
#include <iostream>
using namespace std;
// A class with private destuctor
class Test
{
private:
~Test()
{
cout<<"Inside destructor"<<endl;
}
friend void destructTest(Test* );
public:
void display()
{
cout<<"I am display func:"<<this<<endl;
}
};
void destructTest(Test* ptr)
{
cout<<"In here:"<<ptr<<endl;
delete ptr;
ptr = NULL;
}
int main()
{
Test *ptr;
ptr = new Test;
destructTest (ptr);
ptr->display();// this gets called properly!
return 0;
}
指针引用是如何保持的?我甚至尝试将此代码的某些部分(= new Test())移动到另一个函数,只是为了查看它是否与本地引用有关,但引用仍然存在直到程序结束!
只有当我把一个ptr = NULL时,在destructTest调用之后,它仍然调用显示函数,但是将内存位置设为0。
答案 0 :(得分:2)
您的display()
函数实际上并未访问已分配或(现已)删除的任何内存。
如果你有一个成员变量并试图访问它,该程序将更有可能崩溃。
然而,你在这里做的是未定义的行为,只是因为你删除了对象,并不意味着任何内存已经改变了以前的位置,或者它有,或者谁知道,这完全依赖于实现你不能依赖它。简而言之,一旦取消引用已删除的指针,包括通过电子邮件发送您的猫,就会发生任何事情。