longshanks

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  14 Posts :: 0 Stories :: 214 Comments :: 0 Trackbacks

常用链接

留言簿(10)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

vc2008中,mfc将大幅度地更新。我猜测更新mfc的原因,很可能mfc中的一些代码阻碍了vc的进一步发展,不得不加以更新。
我以前曾经提起过,mfc有一个严重违背c++标准的地方:
class   H;
class   S
{
public:
        x()   {
                H*   pThis=this-offsetof(m_s,   H);
                ...
        }
};
class   H
{
        S   m_s;
};
H里包含S的对象,在S里,为了获得宿主类H的指针,用自身的this指针减去m_s在H中的偏移量。这就要求一个类中的子对象必须同宿主对象放在一起 (连续分布),并且固定(偏移量永远不变)。为了在对象布局上给予编译器充分的自由,标准规定offsetof只能用于pod。mfc仅考虑在   vc上使用,所以为了方便而仅仅面向vc编译器编码。这带来了移植性的问题。不过,编译器间的移植性还是小事。现在我们就可以看到mfc的这种做法是搬起 石头砸自己的脚。
sutter和lippman都不止一次地提到将来vc要能够不区分托管和本地的内存管理。也就是说托管的类型可以在native堆上分配,而   native的类型可以在托管堆上分配。问题来了,由于托管堆上,子对象和宿主对象的存放不是连续的,子对象可能同宿主对象隔着十万八千里,和成千上万的 对象。而且子对象可能会在宿主对象的前面。offset也是不确定的。在这种情况下,使用上面的这种代码无异于自杀。所以,为了实现托管和本地内存管理的 统一,必须放弃offsetof这类畸形代码。由此导致了mfc的大幅更新。
另一方面,vc越来越符合标准,而mfc中一些遗留的其他不符合标准的地方,使得编译器不得不同时应付两种情况:标准的和非标的。对编译器着实是个负担,消除这些非标的东西,反而能够使得编译器更加简单高效。
以上这些都是猜测,实际如何,还需具体看2008的mfc库代码。不管怎么样,如果你想要使自己的代码依赖于非标准的特性的话,请三思而后行。
posted on 2007-11-15 15:14 longshanks 阅读(2583) 评论(118)  编辑 收藏 引用
评论共2页: 1 2 

Feedback

# re: mfc大幅更新原因的推测 2007-11-15 16:07 <a href=http://minidx.com>minidxer</a>
还好,标准以外的东西一直都不用  回复  更多评论
  

# re: mfc大幅更新原因的推测[未登录] 2007-11-15 16:12 heroboy
这种东西有什么好改的
mfc/atl里不跨平台的东西多了去了,比如:__if_exises

主要是不做c++/cli,所以有空改进mfc了  回复  更多评论
  

# re: mfc大幅更新原因的推测 2007-11-15 16:35 万连文
不赞成,主要是用户界面风格经过十多年变化,现有的mfc库除了OLE以及一些基础库方面(字符串、集合、进程线程模块管理等)尚且实用可用外,几乎全部淘汰掉。这种意义上MFC已经完全退化为一套程序开发框架而失去了界面库的真正意义。用MFC的开发者都知道假如不使用其他界面库,只有东拼西凑一些网上下载的代码,界面风格及其不一致,很不专业。就目前形式看,BCG以及XTreme toolkit等依赖MFC的日子不久远,还不如整合到MFC中找到一条尚且说得过去的出路,尤其是BCG有了强大的XTreme toolkit冲击(好像BCG没有正规公司都是靠控件网站销售),我想是不是BCGControlbar会直接被MFC采纳.  回复  更多评论
  

# re: mfc大幅更新原因的推测 2007-11-15 17:47 yaotong
http://blog.joycode.com/jiangsheng/archive/2007/11/12/111275.aspx  回复  更多评论
  

# re: mfc大幅更新原因的推测 2007-11-15 22:02 万连文
哦也,我猜对拉。  回复  更多评论
  

# re: mfc大幅更新原因的推测 2007-11-16 11:39 akirya
但实际上offsetof是可以用在非pod类型上面的
虽然依赖硬件编码,但这种做法是不会出现错误的.  回复  更多评论
  

# re: mfc大幅更新原因的推测 2007-11-26 12:33 小名阿铁
MFC....感觉比C++还难……
非标准的太多,太复杂,虽然某些人说它的内部实现有很多值得学习的地方.
但MFC本身不值得学习!
怎么改与我无关,虽然我是做C++.  回复  更多评论
  

# re: mfc大幅更新原因的推测 2007-12-19 21:27 ffl
想问下没学过mfc的我到底要不要学呢?
  回复  更多评论
  

# lghisnii 2008-06-12 21:24 lghisnii
<a href="http://bykrecpn.com">sqzxlboy</a> sixxgfei http://eilpupql.com wuqrvtnj bgusdqau [URL=http://kvgcdtwd.com]wlzynxye[/URL]   回复  更多评论
  

# ehoazyyc 2008-06-12 22:36 ehoazyyc
<a href="http://wejsjvre.com">bwygzakn</a> xakxjqsx http://nqrrgiaq.com nvuliute lnhqevih [URL=http://qbphjzsw.com]ltrvwtix[/URL]   回复  更多评论
  

# purchase xanax 2008-06-13 03:37 purchase xanax
The crux... is that the vast majority of the mass of the universe seems to be missing.  回复  更多评论
  

# losec 2008-06-13 03:38 losec
People everywhere confuse what they read in newspapers with news.  回复  更多评论
  

# naprosyn 2008-06-13 03:42 naprosyn
Nothing is as simple as we hope it will be.  回复  更多评论
  

# azithromycin 2008-06-13 07:43 azithromycin
Depend not on another, but lean instead on thyself...True happiness is born of self-reliance.  回复  更多评论
  

# cheap levitra 2008-06-13 07:44 cheap levitra
Always do right. This will gratify some people and astonish the rest.  回复  更多评论
  

# norvasc 2008-06-13 11:56 norvasc
It is better to wear out than to rust out.  回复  更多评论
  

# wellbutrin online 2008-06-13 17:21 wellbutrin online
Confidence is the sexiest thing a woman can have. It's much sexier than any body part.  回复  更多评论
  

# trazodone actigraph iliococcygeal 2008-06-13 20:38 trazodone actigraph iliococcygeal
Normal is not something to aspire to, it's something to get away from.  回复  更多评论
  

评论共2页: 1 2 

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理