我正在使用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 []
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |