请教下 this 指针,怎么才能在非类的方法中输出指针地址,有没有生存期?
#include <iostream>
using namespace std;
class AA
{
public:
void showthis()
{
cout < <reinterpret_cast <long> (this);
}
void fun()
{
this-> ~AA();
new (this) AA();//析构后还能使用
}
}gA;
int main()
{
//AA* a = new AA();
//a-> this;
//gA.this;
gA.showthis();
//cout < <gA.this < <endl;//怎么在非类的方法中输出?
}
[解决办法]
this指针的值不就是实际对象的地址嘛,你直接对对象取地址不就可以了?
[解决办法]
this指针不是普通变量,没有生命期概念
[解决办法]
fish_autumn(Autumn) ( )
this指针不是普通变量,没有生命期概念
==================================================
那也不至于对象都析构了还存在吧?若是的话就应该在类外部有某种东西维护他,若又是这样的话,在类外部要怎么输出这地址?
==================================================
谢谢指点!
仔细想了一下:this指针应该是非静态类成员函数的一个参数,指针本身的生命期是在函数内。
[解决办法]
this指针,就其值而言是对象的起始地址,就其本质来说,是编译器在各成员函数的形参表中安插的一个隐晦指针(通常我们看不到它的存在,除非你显示的使用。)用以寻址类成员(this+偏移量 = 类成员地址),实际上一个类实例无论是在其声明中,还是在内存中实例化的对象模型中,这个this都不同于其它类成员一样存在于内存之中,所以它怎么会有生命期呢?因此外部函数也不可能真正的获取到this指针,只不过是用一个类型指针保存等同this指针的类起始地址值罢了。但用以保存这个值的类型指针有其自已的生命期,它和那个你期望得到this指针的对象之生命期是异步的,在对象的生命期终止后,如果这个缓存this指针的变量生命期还未结束,那就自然而然的退化成一个无值形(void*)指针,而且是个无用的指针。
[解决办法]
如果你懂得汇编,看看汇编代码你就明白了
对于
__stdcall
__thiscall
的成员函数
this
的处理方式是不一样的
虽然在函数里都用this访问
this
的生命周期为函数内