this==NULL??? 请问创建实例失败是什么概念?是创建CWnd对象失败,还是创建窗口失败?在什么情况下创建对象会失败?我觉得除非Memory very,very low,否则创建对象不可能失败的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 由此体现出GetSafeHwnd() 的安全性----总能返回一个hwnd class A{ void func();}void A::func(){ cout << ((this == NULL) ? "NULL" : "Not NULL");}A* pA = NULL;pA->func(); 我到是觉得this指针不可能为NULL,如果如winsy(鹰派)所说的创建失败话,那又怎么能够访问的到this 呢?对象都没有分配怎么会有指针呢?再如lms() 写的,我不知道这位仁兄有没执行过这段代码,我相信执行到pA->func(); 的时候就出现错误到,根本到不了func()函数里面。以上的知识在下的一点见解,不知对否,希望各位多多指教。 举个例子:CWnd *p; // p->this 是否会是NULL?..... _AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const 兄弟,_AFXWIN_INLINE 这是不是一个内联标志 我执行过了,class A有点小错误public: void func();其他是正确的再说了,compiler在生成代码时哪管对象指针是不是NULL,压栈就是了,又没有Run Time Check lms兄的代码确实是可以的,我猜猜原因:在生成的C++代码中实际应该是这样的:pa->func() ------> A::func(pA)于是this就是NULL了.不知道这样猜想对不对.另外VeryHurt的提醒也是对的,如果把func的定义改称virtual void func(),运行就会出错,大概是因为虚函数必须在运行期查找VTable的原因. 是负责多线程的场合下的检测用的。线程A中访问其他线程创立的窗口时,如果窗口的生存期和A的访问时机不同步的话,会出现lms演示的那种情形,尤其当这些线程进入释放状态时,编码不良的结构会导致上述状况。基本上,是因为在线程A中的那个this指针只是一个副本,和其他线程中的原件是有区别的。lms所写的应该适用于某些编译器,那个调用可能被编译成: push edx //压入this指针 call far ptr [eax+32] //32表示func()成员在调用表中的偏移位置,eax是成员函数调用Thunk表的位置。如果是虚函数,如MicroAngel所说,进不到func中了,刚调用就GPF。 比如说CWnd *pWnd=NULL;HWND hwnd=pWnd->GetSafeHandle();其实,导致this==NULL的结果是有很多情况的,this不过也是类内部使用的一个指针而已,相当于一个private变量,只是不是用户定义的而已。而程序中习惯用NULL表示非法指针 如何知道使用哪一个IP 在vc中执行效率的问题 Dialog在销毁时是否需要手动调用KillTimer来销毁使用SetTimer开启的Timer? 提出三个VC不懂的问题.请高手指点 100分求助 我的电脑上不了网,我在网上邻居看到是一个感叹号,说是被限制的ip或不能连接,请高手帮忙。 怎样入门学VC 求助,这种现象是不是3721在作怪? 学VC也到达真正入门了。可是朋友说现在还学什么VC,VC很难做出什么有出息的商业软件的。我很茫然。 一个时间问题 winnt/win98登陆前对网络来的消息是如何处理的 如何把单个字符拷到字符串中? 怎样显示位图的一部分???
{
void func();}
void A::func()
{
cout << ((this == NULL) ? "NULL" : "Not NULL");
}A* pA = NULL;
pA->func();
举个例子:
CWnd *p; // p->this 是否会是NULL?
.....
兄弟,_AFXWIN_INLINE 这是不是一个内联标志
再说了,compiler在生成代码时哪管对象指针是不是NULL,压栈就是了,又没有Run Time Check
pa->func() ------> A::func(pA)
于是this就是NULL了.不知道这样猜想对不对.
另外VeryHurt的提醒也是对的,如果把func的定义改称virtual void func(),运行就会出错,大概是因为虚函数必须在运行期查找VTable的原因.
push edx //压入this指针
call far ptr [eax+32] //32表示func()成员在调用表中的偏移位置,eax是成员函数调用Thunk表的位置。如果是虚函数,如MicroAngel所说,进不到func中了,刚调用就GPF。
CWnd *pWnd=NULL;
HWND hwnd=pWnd->GetSafeHandle();
其实,导致this==NULL的结果是有很多情况的,this不过也是类内部使用的一个指针而已,相当于一个private变量,只是不是用户定义的而已。而程序中习惯用NULL表示非法指针