`
helloyesyes
  • 浏览: 1306253 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

mfc大幅更新原因的推测

阅读更多
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库代码。不管怎么样,如果你想要使自己的代码依赖于非标准的特性的话,请三思而后行。
分享到:
评论

相关推荐

    VC/MFC自动更新升级程序源码

    软件自动更新程序及配置服务端源代码。 今天找了一天花掉我50分才找到的源码。 源码本身转换成VS2010出错,本人花了1个小时修复完美生成成功,非常好的软件自动升级程序源码,本人亲测,不会浪费大家积分的。 ...

    MFC替换更新txt文件

    MFC程序,程序目的,更新同一文件夹中的具有一段相同字符名的txt文件,可以使最新的替换旧的文件,也可以是旧的替换最新的文件。

    MFC程序版本自动升级更新

    MFC程序版本自动升级更新是软件开发中的一个重要环节,确保用户始终使用最新、最安全的软件版本。这个过程涉及到多个技术点,包括文件的MD5校验以及更新策略。以下是关于这些知识点的详细解释: 1. **MFC程序的自动...

    自动更新程序VC++MFC实现

    本文将深入探讨如何使用Microsoft Foundation Class Library (MFC) 在Visual C++环境中实现自动更新功能。 MFC是微软提供的一个C++类库,它封装了Windows API,使得开发者能更方便地构建Windows应用程序。在MFC中...

    cpp-AutoUpdate基于MFC实现的自动更新模块

    **cpp-AutoUpdate基于MFC实现的自动更新模块** 在软件开发中,为了确保用户能够及时获取最新的功能修复和安全更新,自动更新机制是必不可少的。`cpp-AutoUpdate`是一个利用Microsoft Foundation Classes (MFC)库...

    mfc.rar_mfc 更新

    本文档“mfc.rar_mfc 更新”似乎聚焦于如何在VC++环境中使用MFC进行窗口程序的更新。 在VC++中,使用MFC构建面向窗口的类主要涉及以下步骤: 1. **定义窗口类**:首先,你需要定义一个继承自MFC的CWnd或其派生类的...

    MFC画图板(C++,菜单显示更新)

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)框架来创建一个具有画图功能的面板,并实现菜单和状态栏的动态更新。MFC是C++编程中用于构建Windows应用程序的一个强大的库,它提供了丰富的类...

    MFC截图程序(更新)

    这个“MFC截图程序(更新)”很可能是一个使用MFC库开发的屏幕捕获工具,能够帮助用户快速、方便地截取并保存桌面或窗口的图像。下面我们将详细探讨MFC、截图技术和程序更新的相关知识点。 1. **MFC基础** MFC是...

    MFC实现时钟 MFC实现时钟

    在Windows编程领域,Microsoft Foundation Class (MFC)库是一个强大的工具,它为开发人员提供了一种使用C++构建Windows应用程序的高效方式。本篇文章将详细探讨如何使用MFC来实现一个基本的桌面时钟程序。 MFC是...

    MFC多语言切换,2019最新方法,C++代码

    MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中...

    MFC学习MFC构架

    同时,不断更新对Windows API的理解,因为MFC最终还是基于API实现的。 最后,要成为一名高级工程师,不仅需要精通MFC,还需要熟悉软件工程的最佳实践,如代码复用、单元测试、版本控制等。还要关注现代编程趋势,如...

    MFC连连看 MFC连连看

    MFC连连看 MFC连连看 MFC连连看 MFC连连看 MFC连连看

    vc++简单的软件自动升级程序源代码.rar_mfc 自动更新_purplexw5_vc 自动升级_更新 VC_自动更新程序

    【标签】中的“mfc_自动更新”再次强调了该程序利用MFC框架来实现自动更新机制。“purplexw5”可能是一个特定的平台或者开发工具,它与自动更新功能有关联。"vc_自动升级"和"更新_vc 自动更新程序"进一步确认了程序...

    mfc-sort.zip_mfc sort_mfc实现排序_mfc排序_排序演示 MFC_排序算法 演示

    3. 动画显示:可能包含用于绘制和更新排序过程的函数,这些函数会与MFC的消息循环相结合,实时更新排序状态。 4. 用户界面资源:如`.rc`文件,定义了窗口布局、菜单、按钮和其他UI元素。 排序算法的实现通常涉及...

    MFC websocket server | MFC websocket服务器

    在这个场景中,"MFC WebSocket服务器"是指使用MFC框架实现的WebSocket服务器。 MFC WebSocket服务器的实现涉及到以下几个关键知识点: 1. **MFC框架**:MFC是基于Windows API的,它提供了一种面向对象的方式来编写...

    五子棋MFC 五子棋MFC 五子棋MFC

    五子棋MFC是一款基于Microsoft Foundation Class (MFC)库开发的桌面应用程序,它允许用户在计算机上玩经典的五子棋游戏。MFC是微软提供的一套C++类库,用于构建Windows应用程序,它简化了窗口对象、消息处理、文件I/...

    MFC中使用Duilib DuiLib_Mfc

    在IT领域,尤其是在Windows应用程序开发中,MFC(Microsoft Foundation Classes)和Duilib是两种常见的库。本篇文章将深入探讨如何在MFC项目中集成并使用Duilib,以实现更高效、更美观的用户界面。 首先,让我们...

    mfc绘制动态实时曲线

    在这个类中,我们需要重写OnDraw()函数,该函数由MFC在需要更新视图时调用。 在`OnDraw()`函数内,我们可以使用GDI函数来绘制曲线。GDI是一组API,用于在Windows应用程序中创建图形,包括线条、曲线、文本等。例如...

    MFC代码生成工具MFC代码生成工具MFC代码生成工具

    MFC(Microsoft Foundation Class)是微软提供的一套C++库,用于简化Windows应用程序的开发。MFC代码生成工具则是为了帮助开发者快速构建基于MFC的应用程序,减少手动编写重复性代码的时间,提高开发效率。 MFC本身...

    MFC经典例程150例.zip_MFC_MFC 例程_MFC例程_mfc经典例程

    MFC编程中非常经典的例程,内容详细,简单易懂,是初学者必看的资料。

Global site tag (gtag.js) - Google Analytics