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

时间:2016-01-21 16:02:02

标签: c++ c++11

我正在使用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 ';'

问题

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

备注(版本)

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

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

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

2 个答案:

答案 0 :(得分:7)

  

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

不,你没有。

  

目的是将删除重定向到我的重写版本

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

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

答案 1 :(得分:3)

有关可替换的释放函数,请参阅cppreference。您可以覆盖全局删除操作符。