Goz*_*Goz 1 c++ memory-management implicit-cast
我的String类提供了一个运算符char*重载,允许您将字符串传递给C函数.
不幸的是,我的一位同事无意中发现了一个错误.
他实际上有以下代码.
StringT str;
// Some code.
delete str;
Run Code Online (Sandbox Code Playgroud)
反正是否有阻止删除将字符串对象强制转换为char*以防止将来出现这样的错误? std::string通过不提供char运算符重载来解决这个问题,但理想情况下,我想保持重载但阻止该删除工作.
是.通过声明(但不定义!)提供两个隐式强制转换 operator char const volatile*.当您传递StringT给C字符串函数时,重载分辨率仍将选择原始operator char const*(完全匹配).但delete str;现在变得含糊不清.
声明可以是私有的,因此如果以某种方式选择它将是编译时错误.预期的歧义发生在重载解决之前 - private唯一能够捕获极其罕见的情况,即volatile以某种方式选择过载.
| 归档时间: |
|
| 查看次数: |
933 次 |
| 最近记录: |