我正在使用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 ';'
问题
有没有办法在不影响=删除的情况下重新定义删除?
备注(版本)
重新定义关键字确实需谨慎处理,在任何情况下都可能通过其他设计来避免。我已经充分意识到这一点,并且不要求解决方法。将此问题视为研究而非实际生产开发。
这就是说我只想在这里讨论一个问题,即我们在两种不同的情况下都有一个含有两种不同含义的关键词。
所以问题只是在用作发布操作时定义删除而不是作为"没有实现"标记
答案 0 :(得分:7)
我需要重新定义删除关键字
不,你没有。
目的是将删除重定向到我的重写版本
您可以提供自己的operator delete
定义。这不需要重新定义关键字。另外一个好处是,提供您自己的operator delete
定义也会影响使用delete
关键字的所有库代码,甚至包含已编译的库代码而不包含任何标题,这看起来像你的'我想要。
建议进一步阅读,包括一个简单的例子:operator delete, operator delete[]
答案 1 :(得分:3)
有关可替换的释放函数,请参阅cppreference。您可以覆盖全局删除操作符。