正确删除单例

2023-12-12

我有以下代码:

我的类.h:

static MyMutex instanceMutex;
static MyClass* getInstance();
static void deleteInstance();

我的类.c:

MyMutex MyClass::instanceMutex;

MyClass* MyClass::getInstance()
{   
    if (theInstance == 0)
    {
        instanceMutex.acquire();
        if (theInstance == 0)
        {
            theInstance  = new MyClass();
        }
        instanceMutex.release();
    }
    return theInstance;
}

void MyClass::deleteInstance()
{   
    if (theInstance != 0)
    {
        instanceMutex.acquire();
        if (theInstance != 0)
        {
           theInstance->finalize();
           delete theInstance; 
           theInstance = 0;
        }
        instanceMutex.release();
    }
    return;
}

我对此有两个问题:

  • 上面的代码正确且安全吗?
  • 在 MyClass::deleteInstance() 中调用“delete theInstance”后,我调用

    • 实例 = 0;
    • 实例Mutex.release();

    但如果实例被删除,那怎么可能呢?班级的记忆不是消失了吗?


如果它是一个单例 - 它被定义为只有一个实例 - 如果你删除它 - 这会下降到 0

所以看来你根本不应该支持删除

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

正确删除单例 的相关文章

随机推荐

  • expo-auth-session - 返回应用程序时的两个应用程序选项

    SDK版本 43 0 0 平台 Android iOS 网络 所有 Android 您好 我在托管工作流程中使用 expo auth session 通过其官方 API 收集 Instagram 用户数据 它在开发环境中运行良好 通过 ex
  • awk 搜索字符串并设置退出代码(如果存在)

    我想检查两个地址之间是否存在一行并返回退出代码0如果它存在并且1如果没有 我想我已经有了一个可能的例子 但我想知道是否有一种更干净的方法来做到这一点 或者也许是 RedHat 上也常见的不同工具 我的命令 awk BEGIN found 1
  • 管道超级代理响应到快速响应

    我正在尝试使用 Express 应用程序 代理 一些文件 为什么下面的代码不起作用 var app require express var request require superagent app get image function
  • GeoServer 不会写入我的 PostgreSQL 可更新视图

    继从这个先前的问题我使用的是 PostgreSQL 8 4 并且在可更新视图方面遇到问题 我有一个看法 CREATE VIEW filedata view AS SELECT num id ST TRANSFORM the geom 900
  • 单击 vue 组件中的“保存”按钮后如何关闭模式?

    我的 vue 组件是这样的
  • Java listjar 目录中的文件

    有什么办法可以使用吗listFiles 在已打包到 jar 中的目录上 假设我的资源目录中有一个目录 其中包含一些文本文件 texts text1 txt and texts text2 txt 在这个 Java 程序中 我有一个需要使用的
  • 正确使用GetRawInputBuffer

    我正在尝试使用 Win32 原始输入 API 以更高精度收集原始鼠标数据 但我似乎无法理解文档和样本完全为了GetRawInputBuffer 当我的鼠标悬停在窗口上时 似乎什么也没有发生 当我单击或释放窗口标题栏时 我似乎只获得缓冲数据
  • NetBeans 不再为以前生成的代码生成 JAR 文件

    两年前 我使用 Java 编写了一个简单的上传小程序 使用 NetBeans 开发 当我第一次点击 清理和构建 时 以及之后的一段时间 它运行得非常完美 它将运行整个构建过程并生成一个 JAR 文件 然后我可以将其上传到我的 Web 服务器
  • 用于阻止特定日期(假期)的引导日期选择器配置

    有谁知道如何配置日期选择器不显示特定日期 例如 7 月 4 日 这似乎可以使用 beforeShowDay 来完成 但我并不肯定 http jsfiddle net Lr3taznx a array of dates that should
  • 如何启用cookie

    我有这个任务来读取 写入 启用 cookie 以便将用户名存储在变量中 然后写入 cookie 我的问题是代码的最后一部分似乎正在工作 但是用户名应该存储到变量中的第一部分不起作用 我可以看到当我运行代码时 前两个警报框没有显示 它应该以
  • React传单和react-leaflet-draw

    我正在尝试在传单地图上实现绘制功能 我创建了一个仅安装了react leaflet的新应用程序 使用npx create react app并安装了以下软件包 npm install React React dom 传单 npm 安装反应传
  • 复制到剪贴板在 Android 上不起作用

    使用此视图创建标准移动应用程序 public class DebugView extends View ListView
  • 为什么 sys.getrefcount 给出巨大的值?

    import sys a 10 b a print sys getrefcount a b 1 print sys getrefcount b output 22 614 我的Python解释器有问题吗 为什么这会给出像 614 这样巨大的
  • Android:Proguard 的推荐配置是什么?

    我正在为 Android 开发应用程序并使用 Proguard 来混淆代码 目前我正在使用 ProGuard 配置 optimizationpasses 5 dontusemixedcaseclassnames dontskipnonpub
  • MVC4 & IClientValidatable - 自动 AJAX 调用服务器端验证

    我正在寻找在 MVC4 中实现自定义客户端验证 我目前让它与标准属性配合得很好 例如我的模型中的这个 public class UploadedFiles StringLength 255 ErrorMessage Path is too
  • 使用 std::for_each 和 std::views::iota 的并行 for 循环

    我想使用以下方法为基于并行索引的 for 循环设置一个简单的解决方法std views 为了按顺序运行 代码如下所示 int main pseudo random numbers random device rd default rando
  • 使多维数组唯一的php

    我的数组如下所示 大批 1 gt stdClass Object id gt 225 user id gt 1 name gt Blue Quilted Leather Jacket by Minusey 499 2 gt stdClass
  • 添加行时数据表中的重复列

    我创建一个 DataTable 并将其绑定到 DataGrid 我的数据源由一个表 FooTable 组成 该表由一列 FooName 组成 以下代码运行良好 除了每次添加新行时 都会有一个重复的列填充相同的数据 我不知道如何摆脱它 请参阅
  • 使用 XPATH 或 CSS 选择器在 Selenium 中查找元素

    我试图在 C 中使用 Selenium Webdriver 查找元素 导入 已尝试以下代码但没有找到它 driver FindElement By XPath class menu bg ul li 3 Click driver FindE
  • 正确删除单例

    我有以下代码 我的类 h static MyMutex instanceMutex static MyClass getInstance static void deleteInstance 我的类 c MyMutex MyClass in