为什么微软仍然支持nothrownew.obj?

时间:2011-11-29 06:36:51

标签: c++ visual-c++ memory-management new-operator

According to MSDN,Microsoft仍然使用Visual C ++ 10(Visual Studio 2010)运行时库运送nothrownew.obj,以便用户可以链接它并具有“普通”的不标准行为(不是{{1 } {flavor} nothrow在分配失败时返回null。这种不合标准的行为可追溯到Visual C ++ 6,现在它被认为是非常古老的。

为什么会这样做?我的意思是他们使编译器的每个新版本越来越符合标准。例如,Visual C ++ 7将支持“default int”,但Visual C ++ 9则不支持。通过稍微更改代码以使用new的{​​{1}}风格,可以轻松实现new的旧的不合标准行为 - 这很简单,非常简单。

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

2 个答案:

答案 0 :(得分:4)

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

我猜这是为了方便:

  1. 微软本身可能在某些产品中需要它,而且将它与编译器工具结合起来更容易。
  2. 微软可能知道有人(比如一个大的供应商/应用程序)仍然需要它,而且只是提供它更容易(甚至在编译器特定的情况下也是必要的)。
  3. Microsoft可能知道/预计它通常仍会在旧版应用程序中“广泛”使用。无论大小。
  4. “它没有伤害”,可以说是有道理的。例如,微软在Windows中维护向后兼容性方面有很长的记录(参见Raymond Chens blog),可能并不总是好的。
  5. 文档,测试等需要更改(或删除,但仍然)。
  6. 也就是说,删除它可能会更麻烦,然后保留它。

    至少他们需要/应该在删除之前提供已弃用的通知。我不知道他们是否为VS2010或任何先前版本做过。

答案 1 :(得分:2)

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

作为旁注,我们是专业领域的主要 ISV。如果我们决定改变操作系统,整个行业可能会改为。 (在Windows之前,我们还建立了一个专门的操作系统。)