C++11 重新定义删除,而不影响 =delete
C++11 Redefine delete without affecting =delete
我正在使用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首选项。您可以覆盖全局删除运算符。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运算符C++ "delete []"仅删除 2 个前值
- 为什么擦除方法会影响结束方法
- 内联如何影响模块接口中的成员函数
- g++用户定义的动态链接库上的全局new和delete运算符
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 在容量内调整矢量大小时的性能影响
- 为什么"delete"关键字不删除节点?
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- "delete"在 C++ 中实际上做了什么?
- 析构函数和'delete'之间的区别
- 未达到的情况会影响开关外壳性能
- 如何知道何时调用删除以及何时调用 delete[] C++?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 析构函数中的"delete this"
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 循环仅对第一行正常工作.其他行不受 for 的影响
- C++11 重新定义删除,而不影响 =delete
- New和delete操作符不影响指向该类的指针的Deque的内容