删除重载、递归溢出

2024-05-07

嘿伙计们,我写了一个快速测试。我想删除调用deleteMe,然后它会自行删除。这样做的目的是让我可以正常删除由lib分配的obj。 (我不希望因 crt 或 w/e 导致任何崩溃)。

通过删除这个,我得到了一个堆栈溢出,没有它,msvc 说我泄漏了 4 个字节。当我不调用 test 时,我泄漏 0。如何删除而不存在递归问题? -编辑- 为了让这一点更清楚。我希望LIB调用delete(因此deleteMe)而不是由于crt而调用程序

class B
{
public:
    virtual void deleteMe()=0;
    static void operator delete (void* p) { ((B*)p)->deleteMe(); }
};

class D : public B
{
public:
    void deleteMe()      {
        delete this;
    }
};

int test()
{
    B *p = new D;
    delete p;
    return 0;
}

递归是由于deleteMe呼叫delete,这称为 Boperator delete那个叫deleteMe再次。超载也没关系operator delete(虽然你通常超载operator new也),特别是在处理“外来”对象时(这可能是您的情况),但是您必须依次从自定义内部调用实际的清理例程delete.

一般情况下超载operator delete必须匹配operator new。在你的情况下:

B *p = new D;

Here p与全局分配new,所以它必须与全局一起释放delete. So:

class D : public B
{
public:
    void deleteMe()      {
        ::delete this;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除重载、递归溢出 的相关文章

  • Stackoverflow 和函数指针

    我对此很迷茫 希望这里有人能提供帮助 我的应用程序由数百个评估数字代码的函数组成 每个函数的源代码在 5MB 范围内 并且我使用std map到函数指针 显然发生的情况是 当我尝试将参数传递给其中一个函数 通过指向它的指针访问 时 出现堆栈
  • C++“重载”if() 语句

    是否有可能改变if 以便 class Foo int x Foo foo if foo 仅当价值x是不是零的东西 或者 到 int 的显式用户定义类型转换是否有效 这是一种合适的方法吗 或者 最好做类似的事情if foo getX 您可以通
  • 为什么我们需要在重载 >> 和 << 运算符时返回对 istream/ostream 的引用?

    如果我不回来会怎样din or dout 实际上我正在读一本书 其中作者返回了返回流引用 istream operator gt gt istream din vector a for int i 0 i
  • 通过访问器函数使用重载的operator[]

    我有一个访问器函数 它返回对类型 std map 的 const 引用 myMap t const getMap const return paramMap 该类型有一个重载 操作员 然后使用的语法是什么 直接从 getter 函数获取操作
  • 全局运算符和成员运算符的区别

    定义一个接受类的两个引用的全局运算符和定义一个仅接受正确操作数的成员运算符之间有区别吗 Global class X public int value bool operator X left X right return left val
  • 重载运算符 == 与 Equals()

    我正在开发一个 C 项目 到目前为止 我已经使用不可变对象和工厂来确保类型的对象Foo总是可以比较是否相等 Foo对象一旦创建就无法更改 并且工厂始终为给定的参数集返回相同的对象 这非常有效 并且在整个代码库中我们假设 始终致力于检查相等性
  • 没有合适的用户定义转换

    我正在尝试编写一个包装数值的 C 程序 我通过编写一个超类来做到这一点 它将处理两个简单函数和一个运算符重载函数 这是我的代码 include
  • 如何编写具有 cout 样式接口的记录器类 (logger << "Error: " << val << endl;)

    我想创建一个记录器类 具有如下功能 Logger log log lt lt Error lt lt value lt lt seen lt lt endl 这应该打印一条自定义格式的消息 例如 2009 年 9 月 12 日 11 22
  • 使用变体泛型委托类型对运算符 == 进行重载解析

    重载解析的精确规则是什么 两个委托类型表达式之间 考虑以下代码 其中using System 是需要的 static class ProgramA static void TargetMethod object obj static voi
  • MATLAB:涉及大数的计算

    如何在 MATLAB 中执行涉及大量数字的计算 举一个简单的例子 任意精度计算器将显示 1 120 132 370 260 约为 1 56 但 MATLAB 无法执行此类计算 power 120 132 factorial 370 fact
  • 如何在 C++ 中重载数组的运算符<<?

    我正在尝试这样做 template
  • 为什么Java不提供运算符重载?

    从 C 到 Java 明显的未解决问题是为什么 Java 不包含运算符重载 Isn t Complex a b c a b c 比简单得多Complex a b c a b add c 是否有已知的原因 有效的论据not允许运算符重载 原因
  • C++ 中的 min= 习惯用法?

    We use x y 代替 x x y 同样对于 和其他运营商 嗯 那又怎样呢 x min y 代替 x std min x y 该命令是否有一个常用的习惯用法 不需要使用另一个运算符对语言进行 不可能的 扩展 这当然不是惯用的 但你也许可
  • 不同类型的 C++ 对称二元运算符

    我正在学习 C 我想知道是否可以深入了解创建适用于两种不同类型实例的二元运算符的首选方法 这是我为了说明我的担忧而制作的一个例子 class A class B class A private int x public A int x in
  • 诊断 RangeError:React KeyEscapeUtils 中超出了最大调用堆栈大小

    背景 我们的 Web 应用程序是使用官方的 React Redux 绑定用 React 和 Redux 编写的 此网络应用程序中使用的另一个主要库是PaperJS http paperjs org 我们最近将其转变为 Redux 应用程序
  • 检测堆栈已满

    在编写 C 代码时 我了解到使用堆栈来存储内存是一个好主意 但最近我遇到了一个问题 我有一个实验 其代码如下所示 void fun const unsigned int N float data 1 N N float data 2 N N
  • 有没有办法在指向类类型的指针中调用类运算符而不使用 * ?

    当我有一个指向类的指针时 是否可以在不使用 的情况下调用operator class MyClass public void operator int n cout lt lt In int main MyClass a new MyCla
  • C++ 模板友元运算符重载

    我的代码有什么问题吗 template
  • 重载多维括号[重复]

    这个问题在这里已经有答案了 如何重载多维括号 假设我有一个类 它使我能够访问n 向量空间 例如 class NSpaceVector private int vectorSpace 8 8 8 8 8 8 8 public const NS
  • Java 重写 hashCode() 得到 StackOverflowError

    所以我不太熟悉重写 hashCode 并且我似乎在 hashCode 方法中以某种方式进行了一些无限递归 这是我的场景 我有一个 DuplicateCache 类 它是一个缓存对象 用于检查系统中的重复对象 我有一个静态内部类 Duplic

随机推荐

  • 如何在 Docker for Windows 中设置共享驱动器?

    如何在 Docker for Windows 中设置共享驱动器 我正在使用最新版本 18 Stable 和 Edge 我的设置屏幕如下所示 它缺少一些选项 如共享驱动器 高级和网络 如第二张图片所示 为什么我缺少这些选项 My settin
  • 如何在 ReactJs 中使用 Hooks useState 编写多行状态

    React 16 9 我知道这class component state class JustAnotherCounter extends Component state count 0 相当于使用Hooks useState functi
  • 在 dart 中,集合如何确定两个对象相等?

    我不明白集合如何确定两个对象何时相等 更具体一点 什么时候add集合的方法 确实添加了一个新对象 并且什么时候它不作用一个新对象 因为该对象已经在集合中 例如 我有以下类的对象 class Action final Function fun
  • iOS 安全性将带有密码的数据发送至服务器或从服务器发送数据

    我正在构建一个应用程序 需要在服务器执行任何操作之前从用户设备发送密码以在服务器上进行身份验证 事情是这样的 用户的手机上有一个纯文本密码 该密码也在服务器中以 bcrypt 二进制文件的形式存在 用户想要从数据库中获取某些内容 因此用户通
  • 使用 linux perf 工具测量应用程序的 FLOP

    我想使用 perf Linux 性能计数器子系统的新命令行接口命令 来测量某些应用程序执行的浮点和算术运算的数量 出于测试目的 我使用了我创建的一个简单的虚拟应用程序 请参见下文 因为我找不到任何为测量 FP 和整数运算而定义的 perf
  • GLSL 棋盘图案

    我想用跳棋来遮蔽四边形 f P 下限 Px 下限 Py mod2 我的四边形是 glBegin GL QUADS glVertex3f 0 0 0 0 glVertex3f 4 0 0 0 glVertex3f 4 4 0 0 glVert
  • x % 2 == 0 是什么意思? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我确信这是
  • Python:数百万个小文件的读写速度缓慢

    结论 看来 HDF5 是适合我的目的的方法 基本上 HDF5 是一种用于存储和管理数据的数据模型 库和文件格式 并且旨在处理令人难以置信的大量数据 它有一个名为 python tables 的 Python 模块 链接在下面的答案中 HDF
  • 第 n 个孩子没有响应课程 [重复]

    这个问题在这里已经有答案了 是否可以让 nth child 伪选择器与特定的类一起使用 看这个例子 http jsfiddle net fZGvH http jsfiddle net fZGvH 我想让第二个 DIV red 变成红色 但它
  • HttpServletRequest.getRemotePort() 在同一台机器上收到的每个 http 请求返回不同的端口?

    我需要识别注册到我的服务的客户端的远程 IP 和端口 此外 当客户端 Web 应用程序出现故障时 它会从我的 Web 服务中取消注册 我在用HttpServletRequest getRemoteAddress and HttpServle
  • 如何在C#中确定现有的oracle数据库连接?

    假设我使用正确的凭据调用以下方法 private bool Connect string username string password string CONNSTRING Provider MSDAORA Data Source ISD
  • Single.zip - 如何捕获失败的呼叫并继续其余的网络呼叫?

    我正在进行 5 个并行网络调用 模拟其中 4 个成功 其中 1 个失败 失败的调用使整个Single zip 失败 即使其他 4 个网络调用成功 我也无法获得它们的结果 如何处理单个失败的网络调用的错误Single zip 并获得成功者的结
  • 标头搜索路径给 Grabkit 带来麻烦

    我正在为 iPad 开发一个 iOS 6 应用程序 我使用一个名为 Grabkit 的存储库 我必须将其作为嵌套 子项目添加到我的项目中 为了使其工作 我必须在标题搜索路径中添加以下代码 TARGET BUILD DIR include G
  • 按行中的值选择 pandas 数据框中的列

    我有一个pandas DataFrame列太多 我想选择行中的值等于的所有列0 and 1 所有列的类型是int64我无法通过以下方式选择它们object或其他类型 我怎样才能做到这一点 IIUC 然后你可以使用isin http pand
  • Javascript:使用箭头键导航表格输入

    我正在为客户制作 HTML 成绩册 我使用 PHP 生成成绩册 然后输出一个 HTML 表 如下例所示 每个 td 包含一个带有 td
  • Spring 3 JSR-286(portlet)文档

    我知道Spring 3支持JSR 286 portlet 版本 2 0 但是我找不到很多这方面的文档 任何人都可以分享一些关于此的链接吗 谢谢 找到几个教程 使用 Spring 3 MVC Portlet 的 Hello World htt
  • 配置解析器和带 % 的字符串

    愚蠢的问题 当然 简单的答案 我正在使用 configparser 从文件中读取一些字符串 当字符串具有 符号 例如 时 它会抱怨 ConfigParser InterpolationSyntaxError 后必须跟 或 找到 有人熟悉这个
  • 防止打开 VB 应用程序的多个实例

    我的 VB6 应用程序由 MS Access 数据库支持 允许用户打开应用程序的多个实例会产生冲突并更改连接的数据库 理想的解决方案是 如果用户尝试打开新实例 则关注现有实例 我怎样才能达到这个目的 Use App PrevInstance
  • Spark 中的广播 Annoy 对象(对于最近邻居)?

    由于 Spark 的 mllib 没有最近邻居功能 我正在尝试使用Annoy https github com spotify annoy为近似最近邻 我尝试广播 Annoy 对象并将其传递给工人 然而 它并没有按预期运行 下面是可重复性的
  • 删除重载、递归溢出

    嘿伙计们 我写了一个快速测试 我想删除调用deleteMe 然后它会自行删除 这样做的目的是让我可以正常删除由lib分配的obj 我不希望因 crt 或 w e 导致任何崩溃 通过删除这个 我得到了一个堆栈溢出 没有它 msvc 说我泄漏了