C++:如果我重载 new 运算符,我是否也必须重载 delete 运算符?
C++: If I overload new operator, do I have to overload the delete operator too?
我正在阅读一个关于 SO 的问题,在其中一个 answers 中,它被提到为:
If no unambiguous matching deallocation function can be found,
propagating the exception does not cause the object’s memory to be
freed.
因此,如果我只是重载 new
运算符而不是 delete
运算符,是否会创建和调用任何默认的 delete
运算符;或者,我是否还必须显式编写 delete
运算符。
这意味着如果你用额外的参数重载operator new,而不是用额外的参数重载相应的delete,如果在构造函数中发生异常,则不会调用delete operator。另一方面,如果你正在重载基本的 new(没有额外的参数),并且发生异常,将调用没有额外参数的 delete,如果你没有重载它,这将是默认的运算符 delete。
我正在阅读一个关于 SO 的问题,在其中一个 answers 中,它被提到为:
If no unambiguous matching deallocation function can be found, propagating the exception does not cause the object’s memory to be freed.
因此,如果我只是重载 new
运算符而不是 delete
运算符,是否会创建和调用任何默认的 delete
运算符;或者,我是否还必须显式编写 delete
运算符。
这意味着如果你用额外的参数重载operator new,而不是用额外的参数重载相应的delete,如果在构造函数中发生异常,则不会调用delete operator。另一方面,如果你正在重载基本的 new(没有额外的参数),并且发生异常,将调用没有额外参数的 delete,如果你没有重载它,这将是默认的运算符 delete。