C++11 重新定义删除,而不影响 =delete

C++11 Redefine delete without affecting =delete

本文关键字:影响 delete 删除 新定义 定义 C++11      更新时间:2023-10-16

我正在使用Visual C++ 2013。

我需要重新定义我的删除关键字(另一个内存管理工具)

#define delete foo(SOME,PARA,METERS), delete

目的是将删除重定向到我的覆盖版本,但是在使用" = delete"关键字或使用使用它的外部代码时,我遇到了问题。

Class Something {
public:
    Something() {}
    Something(const Something &) = delete;
}

注意:VC13给出以下错误:

error C2061: syntax error : identifier 'instance'
error C2238: unexpected token(s) preceding ';'

问题

有没有办法在不影响=删除的情况下重新定义删除?

注释(版本)

重新定义关键字确实需要谨慎处理,并且几乎在任何情况下都可以通过其他设计来避免。我已经完全意识到这一点,我不要求解决方法。将这个问题更多地视为一项研究,而不是实际的生产开发。

话虽如此,我只想在这里讨论一个问题,即我们有一个关键字在两种不同的情况下具有两种不同的含义。

因此,问题只是关于在用作发布操作而不是"无实现"标记时定义删除。

我需要重新定义我的删除关键字

不,你没有。

目的是将删除重定向到我的覆盖版本,

您可以提供自己的operator delete定义。这不需要重新定义关键字。作为一个额外的好处,提供你自己的operator delete定义也会影响所有使用 delete 关键字的库代码,甚至是已编译的库代码,但不包含任何标头,这似乎是你想要的。

建议进一步阅读,包括一个简单的示例:运算符删除,运算符删除[]

有关可替换的释放函数,请参阅 cpp首选项。您可以覆盖全局删除运算符。