欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

c 语言new运算符重载,c – 当我们重载new运算符时,是否需要重载放置new运算符?...

发布时间:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 c 语言new运算符重载,c – 当我们重载new运算符时,是否需要重载放置new运算符?... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

通常不会,因为它不经常使用.但它可能是必要的,因为当你在类中重载operator new时,它会隐藏global :: operator new的所有重载.

因此,如果您想在该类的对象上使用placement new,请执行;否则不要.同样适用于新的.

如果您刚刚更改了分配方案,并且您感到惊讶的是某个地方某人正在使用背后的新位置,那么在应用此创可贴之前可能需要进行调查.

如果在标准库容器内部使用该类,而不是直接使用new,则自定义分配方案应由Allocator类定义,而不是过载.默认分配器std :: allocator不会尊重成员运算符的新重载,而是绕过它们.见下文.

免责声明:类范围操作符新的重载主要用于调试,即使这样,获得可靠有意义的语义也很棘手.谨防:

>您还需要重载运算符删除. (在这个问题的例子中没有完成.)

>过载将被限定语法:: new T绕过.您无法阻止此类绕过.这是std :: allocator< T>的方式.分配东西.你可以为你的类型专门化std :: allocator,但这已经进入了兔子洞.

>对于任何库引入的每个::运算符新重载,包括来自< new>的新规范,您必须考虑它是否适用于您的类并决定是否添加重载,或以其他方式应对失败不合格的新表达.

>对于您在类中采用的每个:: operator new,必须提供具有正确语义的相应成员放置运算符delete.如果构造函数以异常退出,则调用此方法.如果没有它,将导致仅在非常特定的情况下,在可能受资源约束的池中泄漏内存.

总之,成员操作符new是防御性编码的对立面.

总结

以上是生活随笔为你收集整理的c 语言new运算符重载,c – 当我们重载new运算符时,是否需要重载放置new运算符?...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。