C ++:如果我重载new运算符,我是否也必须重载delete运算符?

问题描述 投票:9回答:1

我正在读一个关于SO的问题,在一个answers中,它被提到:

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

所以,如果我只是重载我的new运算符而不是delete运算符,那么是否会创建并调用任何默认的delete运算符;或者,我是否还必须明确地编写delete运算符。

c++ new-operator dynamic-memory-allocation delete-operator
1个回答
8
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.