2010-02-05 74 views
4

我知道微软自己曾经推荐覆盖操作符new,调用HeapCreate()和HeapAlloc(),但那是前一阵子。有关更多详细信息,请参阅KB139638。我应该重写运算符new/delete在我的C++ WIn32应用程序

我还会受益于覆盖Win32上的新/删除吗?建议的实施是什么?

TIA。

+0

这是的“做...如果你想惹上麻烦”的情形之一。不过,我希望看到一个可以接受的例子。 – djeidot 2010-02-05 11:54:32

回答

6

该文章说你可以可以做到这一点,不是你应该。其中的代码写得很糟糕,并不好笑,也不是线程安全的。一般来说,提供新的和删除的实现将适用于所有的一般编程需求。如果您确定了重新实施将解决的特定问题,则只应考虑重新实施它们。

+2

根据我的经验,每个MSDN示例中的代码都是可怕的写入,这让我笑了起来。然后,我看到该样本的一个确切副本是反复生产代码,这让我想要进行杀人横行。 – 2010-02-05 16:04:12

3

除非你正在执行一个内存密集型程序(无论如何它都会在特定的地方重载分配器更有效),重载new和delete操作符的主要好处是跟踪调试的分配和释放和分析目的。

+0

就像DEBUG_NEW。我知道了。 – djeidot 2010-02-05 18:01:29

1

超载全球new/delete对于大多数情况是一个坏主意(TM)。

只有在需要时才能使用级别内存管理(通过重载)。分析您的应用程序并查看瓶颈是否与基于堆的分配/释放相关。此外,如果您的课程可以/将在以后派生(因为new/deletestatic成员,所以对实施者造成额外负担),情况会变得更加复杂。

尝试传递一个分配器(有策略,所以你可以测试哪个最适合你的需求)类似于STL所做的。

1

你有这样做的理由吗?没有?不要那么做;不让自己过上极度痛苦的机会很渺茫。

你有一个应用程序,你已经配置并确定分配/取消分配的东西是一个瓶颈?因为在你做完之前,我不会为此担心。

这reaks过早optomisation我的:-)

相关问题