为什么微软还支持nothrownew.obj ?

Why would Microsoft still support nothrownew.obj?

本文关键字:obj nothrownew 支持 微软 为什么      更新时间:2023-10-16

根据MSDN,微软仍然没有发布thrownew。obj与Visual c++ 10 (Visual Studio 2010)运行时库,以便用户可以链接到它,并具有"普通"(不是nothrow风味)new在分配失败时返回null的次标准行为。这种不合标准的行为可以追溯到Visual c++ 6,它现在被认为是非常老的。

为什么会这样呢?我的意思是他们使每个新版本的编译器越来越符合标准。例如,Visual c++ 7支持"default int",但Visual c++ 9不支持。通过稍微修改代码,使用newnothrow风味,可以很容易地实现旧的new不合格行为,这是直接的,非常容易的。

为什么这个选项如此重要以至于微软仍然支持它?

嗯,这是一个悬而未决的问题,因为除了微软的负责人之外,没有人能肯定地说——如果有的话。所以,我要咬一口:

我想这是为了方便:

  1. 微软本身可能在他们的一些产品中需要它,它只是更容易与编译器工具在一起。
  2. 微软可能知道有人(比如一个大的供应商/应用程序)仍然需要它,它只是更容易(甚至是必要的,如果编译器特定)仍然提供它。
  3. 微软可能知道/预计它通常仍然"广泛"使用在遗留应用程序中。大或小
  4. "它不疼",很有争议。例如,微软在维护Windows的向后兼容性方面有很长的记录(参见Raymond chen的博客),同样,可以说并不总是朝着更好的方向发展。
  5. 文档、测试等需要修改(或删除,但仍然)。

也就是说,删除它可能比保留它更麻烦。

至少他们需要/应该在删除一个版本之前提供一个已弃用的通知。我不知道他们是否在VS2010或之前的版本中这样做了

因为我现在(2012)将一个产品从Visual c++ 6.0移植到Visual Studio 2010,这极大地帮助了开发速度。在未来几年内,我们也不会进行Unicode转换。如果微软不提供兼容功能,我将自己构建它。

作为旁注,我们是专业领域的 ISV。如果我们决定改变操作系统,整个行业可能会改变。(在Windows出现之前,我们也曾构建一个专门的操作系统)