200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > c 语言new运算符重载 c – 当我们重载new运算符时 是否需要重载放置new运算符?...

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

时间:2023-12-03 03:46:58

相关推荐

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是防御性编码的对立面.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。