#include <stdio.h>
class CTest1
{
private:
int m_i32Data1;
public:
CTest1(int i)
{
m_i32Data1 = i;
}
virtual ~CTest1()
{
}
};
class CTest2
{
private:
CTest1 m_oTest1;
public:
CTest2(int i) : m_oTest1(i)
{
}
virtual ~CTest2()
{
}
CTest1* GetTest1()
{
return &m_oTest1;
}
void Release()
{
delete this;
}
};
int main()
{
CTest2* poTest2 = new CTest2(111);
CTest1* poTest1 = poTest2->GetTest1();
printf("1: %p\n", poTest1);
poTest2->Release();
printf("2: %p\n", poTest1); // poTest1指针的值虽然没有改变,但是该指针指向的对象已经释放了,该对象的虚表指针为脏值,其成员变量m_i32Data1也为脏值
return 0;
}
class CTest1
{
private:
int m_i32Data1;
public:
CTest1(int i)
{
m_i32Data1 = i;
}
virtual ~CTest1()
{
}
};
class CTest2
{
private:
CTest1 m_oTest1;
public:
CTest2(int i) : m_oTest1(i)
{
}
virtual ~CTest2()
{
}
CTest1* GetTest1()
{
return &m_oTest1;
}
void Release()
{
delete this;
}
};
int main()
{
CTest2* poTest2 = new CTest2(111);
CTest1* poTest1 = poTest2->GetTest1();
printf("1: %p\n", poTest1);
poTest2->Release();
printf("2: %p\n", poTest1); // poTest1指针的值虽然没有改变,但是该指针指向的对象已经释放了,该对象的虚表指针为脏值,其成员变量m_i32Data1也为脏值
return 0;
}