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库代码。不管怎么样,如果你想要使自己的代码依赖于非标准的特性的话,请三思而后行。
分享到:
相关推荐
软件自动更新程序及配置服务端源代码。 今天找了一天花掉我50分才找到的源码。 源码本身转换成VS2010出错,本人花了1个小时修复完美生成成功,非常好的软件自动升级程序源码,本人亲测,不会浪费大家积分的。 ...
MFC程序,程序目的,更新同一文件夹中的具有一段相同字符名的txt文件,可以使最新的替换旧的文件,也可以是旧的替换最新的文件。
MFC程序版本自动升级更新是软件开发中的一个重要环节,确保用户始终使用最新、最安全的软件版本。这个过程涉及到多个技术点,包括文件的MD5校验以及更新策略。以下是关于这些知识点的详细解释: 1. **MFC程序的自动...
"vc++ mfc版本更新"这个主题就聚焦于如何在MFC应用中实现自动更新功能。 `AutoUpdate.rar`、`vc_update2011.rar`、`Updater.rar`、`Update.rar`、`autoupdate1.0.0.4_src224017.rar`、`AutoUpdate.zip`这些文件名...
本文将深入探讨如何使用Microsoft Foundation Class Library (MFC) 在Visual C++环境中实现自动更新功能。 MFC是微软提供的一个C++类库,它封装了Windows API,使得开发者能更方便地构建Windows应用程序。在MFC中...
**cpp-AutoUpdate基于MFC实现的自动更新模块** 在软件开发中,为了确保用户能够及时获取最新的功能修复和安全更新,自动更新机制是必不可少的。`cpp-AutoUpdate`是一个利用Microsoft Foundation Classes (MFC)库...
本文档“mfc.rar_mfc 更新”似乎聚焦于如何在VC++环境中使用MFC进行窗口程序的更新。 在VC++中,使用MFC构建面向窗口的类主要涉及以下步骤: 1. **定义窗口类**:首先,你需要定义一个继承自MFC的CWnd或其派生类的...
在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)框架来创建一个具有画图功能的面板,并实现菜单和状态栏的动态更新。MFC是C++编程中用于构建Windows应用程序的一个强大的库,它提供了丰富的类...
这个“MFC截图程序(更新)”很可能是一个使用MFC库开发的屏幕捕获工具,能够帮助用户快速、方便地截取并保存桌面或窗口的图像。下面我们将详细探讨MFC、截图技术和程序更新的相关知识点。 1. **MFC基础** MFC是...
在Windows编程领域,Microsoft Foundation Class (MFC)库是一个强大的工具,它为开发人员提供了一种使用C++构建Windows应用程序的高效方式。本篇文章将详细探讨如何使用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框架来实现自动更新机制。“purplexw5”可能是一个特定的平台或者开发工具,它与自动更新功能有关联。"vc_自动升级"和"更新_vc 自动更新程序"进一步确认了程序...
3. 动画显示:可能包含用于绘制和更新排序过程的函数,这些函数会与MFC的消息循环相结合,实时更新排序状态。 4. 用户界面资源:如`.rc`文件,定义了窗口布局、菜单、按钮和其他UI元素。 排序算法的实现通常涉及...
在这个场景中,"MFC WebSocket服务器"是指使用MFC框架实现的WebSocket服务器。 MFC WebSocket服务器的实现涉及到以下几个关键知识点: 1. **MFC框架**:MFC是基于Windows API的,它提供了一种面向对象的方式来编写...
五子棋MFC是一款基于Microsoft Foundation Class (MFC)库开发的桌面应用程序,它允许用户在计算机上玩经典的五子棋游戏。MFC是微软提供的一套C++类库,用于构建Windows应用程序,它简化了窗口对象、消息处理、文件I/...
在IT领域,尤其是在Windows应用程序开发中,MFC(Microsoft Foundation Classes)和Duilib是两种常见的库。本篇文章将深入探讨如何在MFC项目中集成并使用Duilib,以实现更高效、更美观的用户界面。 首先,让我们...
2. 更新的MFC库:包含了新的API,以支持Windows操作系统的新功能和更新。 3. 调试增强:更强大的调试工具,如断点管理、变量查看和性能分析。 4. 代码质量和性能提升:可能包含了一些代码优化和静态分析工具,以确保...
在这个类中,我们需要重写OnDraw()函数,该函数由MFC在需要更新视图时调用。 在`OnDraw()`函数内,我们可以使用GDI函数来绘制曲线。GDI是一组API,用于在Windows应用程序中创建图形,包括线条、曲线、文本等。例如...
MFC(Microsoft Foundation Class)是微软提供的一套C++库,用于简化Windows应用程序的开发。MFC代码生成工具则是为了帮助开发者快速构建基于MFC的应用程序,减少手动编写重复性代码的时间,提高开发效率。 MFC本身...