小编n3X*_*SLO的帖子

重载新的操作员问题

我决定在我的类中重载new,new [],...运算符,这样我就可以记录它们被调用的文件和行,这样我就可以更轻松地跟踪内存分配/泄漏.

现在问题出在我的堆栈和数组类(以及其他分配内存的模板容器类)中:

如果我将它们与我的一个具有new,new [],...运算符的类一起使用它可以正常工作.

但是如果我将它与标准的c ++数据类型(int,float,...)一起使用,我就无法分配它们,因为没有重载的new运算符匹配new(__ LINE __,__ FILE __)运算符的参数(或者其他人喜欢安置新的).

堆栈代码示例:

// placement new
T* t=new(__ LINE __ , __ FILE__)(&m_data[i])T;
Run Code Online (Sandbox Code Playgroud)

所以我对如何使这项工作有好主意.如果我用新的松散内存记录功能替换new(__ LINE __,__ FILE __).一种解决方案是为标准数据类型创建一个分离的堆栈,其中使用默认的new.

有没有办法在编译时检测模板参数是结构,类还是内置的c ++类型?

你怎么处理这样的东西?你有什么建议?任何关于这种设计的评论(好的,坏的)显然都是受欢迎的(只是不要张贴诸如"不要用自己的容器重新发明轮子"之类的东西).

c++ memory memory-leaks new-operator operator-keyword

8
推荐指数
1
解决办法
2365
查看次数