【发布时间】:2012-09-13 09:21:27
【问题描述】:
我想重载全局和非全局 new/delete 运算符以进行日志记录。
由于我只想添加日志记录信息,因此我想保留此运算符的标准行为。
有没有办法重载 new/delete 运算符来添加日志记录,但不必重写标准行为(这可能容易出错)?
其实,我不仅需要标准的行为。我需要与 Visual 2010 实现相同的行为,这可能不是标准的。
我在这种日志记录中寻找的错误类型是 new[]/delete mismatch。
我可以使用经典工具,但它们会减慢执行速度,我想与其他人共享二进制文件以收集更多信息。
【问题讨论】:
-
我相信,如果你只调用 malloc ,你将保持标准行为。是否保留要替换的 operator new 的精确行为是另一回事。
-
到目前为止有什么尝试吗?您在尝试中遇到了哪些问题?
-
默认行为并不是非常复杂,所以我不会担心。如果你做得好,我想会有一个循环并调用
get_new_handler。确保不要在分配函数中使用标准容器,除非你给它们一个不同的分配器,它本身不使用operator new。 -
@john 谢谢,我在我的问题中添加了信息,我不仅需要标准行为,还需要与 Visual 2010 实现相同的行为。
-
从this excellent FAQ question 你会发现编写你自己的标准符合
operator new/delete并不真正涉及,只需大约5-10 行样板,加上你的日志功能和对@ 的调用987654325@.
标签: c++ operator-overloading new-operator delete-operator