首页

微软C++团队将出席ACCU 2021  

研讨会ACCU 2021来了 微软的C++团队成员Sy Brand和Erika SweetErika Sweet本周将会出席ACCU 2021。如果你有关于我们的演讲,产品或者其他任何方面的问题,请在虚拟会议室里告诉我们。同时,我们也欢迎你光临展览会的 #include <C++> 展示桌,了解有关于社区的更多信息。 Dynamic Polymorphism with Code Inj...

第二部分:关于析构函数何时执行  

让我们继续昨天的”故事” 下面是另外你必须小心留意析构函数执行顺序的例子。昨天的例子是讲述对象的析构函数在错误的时间点执行。今天,我们的主题是:对象析构函数压根就不会执行,这可不是你预先想到的情况,对吧? 假设,我们有一个ObjectLock类,它会在构造函数中获取锁对象,然后在其析构函数中释放它。如下图所示: 再一次地,上面的代码都是标准套路,看起来没有什么大的问题。代...

第一部分:关于析构函数何时执行  

C++: 一座看不见的冰山 Larry Osterman在他的博客中讨论全局对象析构函数执行时的细节,我想说的是,其实不仅是全局对象,对于局部对象来说,它的析构函数的执行时间点也十分重要,你需要谨慎地处理,方能确保安全。我们先考虑下面的代码: 代码看起来再简单不过了,但是请注意,上述代码蕴含Bug一枚。 问题:智能指针的析构函数何时运行? 答案:如果对象超出作用域,也就是在执行到最外层的if语句...

请提防哈希重置攻击

使用哈希值判断内容变更 真实世界中存在很多种不同的哈希算法,例如我们比较熟悉的MD5。这些算法的共同点是,它们会接收一份原文消息,然后产生一组基于消息原文的哈希值(散列),即使原文发生任何一丁点变化,则会引发哈希值的巨大变化,这样你就可以很容易地判断文件的哈希值来知道一个文件是否发生了变化,这种功能的实现是基于这样一个事实:现实中很难在不修改哈希值的情况下,实现对一个文件的修改。 但是 看起来这个...

VS2019中的远程调试支持  

先来一个长句 Visual Studio 2019提供了面向Windows和Linux目标平台的MSBuild和CMake工程的远程调试功能。 因为有了这个功能,我们可以有机会实现下面列出来的几个工作场景: > 在生产环境中直接进行调试,除了需要安装一些必要的远程调试辅助工具之外,你无需安装其他的开发工具。 > 可以在你不熟悉的开发环境中工作,例如,不同的操作系统,不一样的软件配置环境...

如何将个人代码库导入到vcpkg?  

非常感谢Nicole Mazzuca贡献了本文的内容。 你是否正在开发一个依赖于其他库代码的C++工程呢?长年累月地使用各种”胶水脚本”和git submodules来维护库代码的各种”花样”构建是否让你心生疲倦? 是时候试试包管理器了! 也许你之前听人说到过”vcpkg”,看起来这个工具非常适合你的开发团队,但是有一个问题:...

界面设计一二事

一个问题 有时候,我们会在Windows桌面应用的菜单或者按钮的文字后面,看到三个点”…”,这个是什么意思? 举个例子 在一个桌面程序的菜单中有个”另存为…”,或者有个按钮显示为”自定义…”。这些用户控件文字后面的三个点在什么情况下会出现呢? 很多人会说:如果应用即将显示一个对话框,就会使用...

如何理解文件共享选项(例如FILE_SHARE_READ)

实际上它并不复杂,至少比你想象的要简单。 FILE_SHARE_READ 这个文件共享选项的意思是:当我已经打开了一个文件后,其他人依然可以读取这个文件。 如果你不使用这个选项,则你是在表达这个意思:当我打开一个文件后,我不希望其他任何人读取这个文件。 明白了上面的讲解,接下来的工作就交给操作系统处理就可以了。 假设,你忽略了这个选项,那么就在表明:文件打开后,你不希望其他人能读取这个文件。这样的...

随心所欲地对vcpkg依赖进行版本控制  

特别鸣谢 感谢Victor Romero对本文内容的贡献。 今天,我们高兴地宣布vcpkg的一项新特性:包版本控制。开发者等待这项新特性已经很久了,今天它终于来了。这项特性可以实现软件包特定依赖版本的安装,同时控制现有已安装的版本。为了使用这项新特性,你需要在你的仓库里创建一个vcpkg.json的清单文件,用来声明各个程序包的依赖关系。请注意,在命令行模式下安装的程序库还暂未支持版本控制(例如,...

Visual Studio Code 新东西:Makefile工具扩展  

官宣 今天,我们非常高兴地宣布Visual Studio Code中的一项全新扩展:Makefile工具(预览版),此工具主要用于在Visual Studio Code集成开发环境中构建和调试Makefile工程。目前,此扩展还处于测试阶段,但是,我们内部测试了70多个流行开源的Makefile工程,显示出此扩展工具可以很好地和它们一起工作。那大家有兴趣的话,就试试看呗。 安装扩展 首先,需要在V...