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

Ben*_*Ben -1 c++ c++11

我正在使用Visual C++ 2013.

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

#define delete foo(SOME,PARA,METERS), delete
Run Code Online (Sandbox Code Playgroud)

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

Class Something {
public:
    Something() {}
    Something(const Something &) = delete;
}
Run Code Online (Sandbox Code Playgroud)

注意:VC13给出以下错误:

error C2061: syntax error : identifier 'instance'
error C2238: unexpected token(s) preceding ';'
Run Code Online (Sandbox Code Playgroud)

有没有办法重新定义删除而不影响=删除?

备注(版)

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

这就是说我只想在这里讨论一个问题,即我们在两种不同的情况下有一个关键字有两种不同的含义.

所以问题只是在用作发布操作时定义删除而不是作为"无实现"标记.

小智 7

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

不,你没有.

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

您可以提供自己的定义operator delete.这不需要重新定义关键字.另外一个好处是,提供自己的定义operator delete也会影响使用该delete关键字的所有库代码,甚至包含已编译的库代码而不包含任何标题,这看起来像是您想要的.

建议进一步阅读,包括一个简单的例子:operator delete,operator delete []