gpt4 book ai didi

c++ - 停止对 operator delete 的隐式转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:07:53 25 4
gpt4 key购买 nike

我的 String 类提供了一个 operator char* 重载,允许您将字符串传递给 C 函数。

不幸的是,我的一位同事无意中发现了一个错误。

他实际上有以下代码。

StringT str;
// Some code.
delete str;

有什么办法可以防止 delete 将字符串对象转换为 char* 以防止将来出现此类错误? std::string 通过不提供 char 运算符重载来解决这个问题,但理想情况下,我想保持重载但阻止 delete 工作。

最佳答案

是的。通过声明(但不定义!)operator char const volatile* 提供两个隐式转换。当您将 StringT 传递给 C 字符串函数时,重载解析仍将选择您的原始 operator char const*(完全匹配)。但是 delete str; 现在变得不明确了。

声明可以是私有(private)的,所以如果它以某种方式被选中将是一个编译时错误。预期的歧义发生在重载解析之前 - private 仅用于捕获以某种方式选择 volatile 重载的极其罕见的情况。

关于c++ - 停止对 operator delete 的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2138460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com