代码之家  ›  专栏  ›  技术社区  ›  pasha

C++:如果我重载新的操作符,我也必须重载删除操作符吗?

  •  9
  • pasha  · 技术社区  · 6 年前

    我在读一个关于“所以”的问题 answers ,已提到:

    如果找不到明确匹配的释放函数, 传播异常不会导致对象内存 释放。

    所以,如果我只是超载 new 操作员而不是 delete 接线员,是否有违约行为? 删除 创建和调用运算符;或者,是否还必须编写 删除 显式运算符。

    1 回复  |  直到 6 年前
        1
  •  8
  •   Chris Dodd    6 年前

    这意味着,如果用额外参数重载new运算符,而不是用额外参数重载相应的delete运算符,则如果构造函数中发生异常,则不会调用delete运算符。另一方面,如果您正在重载基本的new(没有额外的参数),并且发生异常,将调用不带额外参数的delete,如果您没有重载它,这将是默认的operator delete。