在Android打包项目时,发现登录功能不能使用了,logcat中也没发现什么问题,最后一行一行log定位到了问题。原来是一个so文件中的构造函数被初始化二次!

这个单例是通过继承模板来实现的(暂时不考虑线程安全的问题)

template<class T>class CSingleT{public:static T * Instance()    {if (!ms_pObject)        {            ms_pObject = new T;        }return ms_pObject;    }

static void Create()    {if (!ms_pObject)        {            ms_pObject = new T;        }    }

static void Destroy()    {if (ms_pObject)        {delete ms_pObject;            ms_pObject = NULL;        }    }

static T * Get()    {return ms_pObject;    }

static void Reset()    {        Destroy();        Create();    }

protected:static T * ms_pObject;};

template <class T>T * CSingleT<T>::ms_pObject = NULL;

游戏主线程中是直接调用Instance()方法,之后又通过.so中的一个静态方法来调用Instance(),实际上的结果是直接调用跟通过静态方法调用,会初始化二次单例对象

目前暂时的处理方法是,主线程中通过调用.so的静态方法,在该静态方法中调用Instance的方法,这样就只会产生一个实例对象了。这里暂时没涉及到多线程程的问题,所以也没有加上线程安全的全码

通过静态方法,然后再调用实例对象,这确实是一个很糟糕的方法,为了游戏能跑,暂时这样处理了。

参考:

动态库之间单例模式出现多个实例(Linux)

C++中模板单例的跨SO(DLL)问题:RTTI,typeid,static,单例

转载于:https://www.cnblogs.com/meteoric_cry/p/3942060.html

多个so中模板单例的多次实例化相关推荐

  1. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  2. 在Python中创建单例

    这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...

  3. 笔记:Java中的单例设计模式

    之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...

  4. Javascript中的单例和模块模式

    在javascript中,单例(singleton)就是指只有一个实例的对象,而不需要用new关键字去创建一个对象示例.单例其实有点类似于C# /C++里面的静态类.在javascript中,是以对象 ...

  5. spring框架中的单例Beans是线程安全的么?

    看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...

  6. Spring框架中的单例Beans是线程安全的么

    看到这样一个问题:Spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...

  7. Spring源码 - 从缓存中获取单例Bean

    # Spring源码 - 从缓存中获取单例Bean Spring版本:Spring 5.3.13-release # 1.从缓存中获取单例Bean 单实例Bean在Spring的同一个容器中只会创建一 ...

  8. 【单例】JAVA中的单例

    单例模式,属于创建类型的一种常用的软件设计模式.通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例. Java中单例模式定义:& ...

  9. 关于跨dll的模板单例问题

    C++的模板可以帮助我们编写适合不同类型的模板类,给代码的复用性提供了极大的方便.近来写了一个涉及单例的C++模板类,简化下来可以归结为以下的代码: 1 2 3 4 5 6 7 8 9 10 11 t ...

最新文章

  1. Linux基础命令---添加/删除组
  2. 2018年自主车企销量目标完成情况 这几家企业估计要凉
  3. 【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库
  4. ATL 实现定制的 IE 浏览器栏、工具栏和桌面工具栏
  5. combox简单用法
  6. TracePro模拟
  7. Axure 软件自带的图标元件Icons无法显示的问题解决方法
  8. IC学习笔记9——多比特信号的跨时钟域处理方法之“MUX/DMUX同步器”
  9. RPC:RPC的通信流程
  10. 对称加密和非对称加密!
  11. 前端程序员用css动画给女朋友一个惊喜
  12. 第7.21节 Python抽象类—register注册虚拟子类
  13. 前端 头像右上角的数字标识(通常用作消息提示。。)
  14. java发送ipmsg_用Java向IPMSG发送消息
  15. 电脑报2013年第10期
  16. (全)SpringBoot学习笔记(狂神说java系列)
  17. 开篇 - 麒麟子全方位解读 Cocos Cyberpunk 工程源码
  18. C#上位机 ModbusRTU 03功能码
  19. Jquery easyui tree的使用
  20. iOS App 审核被拒的原因搜罗

热门文章

  1. 【毕设进行时-工业大数据,数据挖掘】Java GUI完善,左对齐
  2. Python简单主机批量管理工具
  3. 讲解ontouchstart、ontouchend、onclick区别和坑点
  4. 解决android.permission.WRITE_APN_SETTINGS
  5. spring冲刺第一天
  6. 为何断点不停 Application_Start()方法
  7. [轉]資料庫讀寫分離
  8. 计院生活--第二章 深入虎穴(下)
  9. ROS系统 服务数据的定义与使用
  10. 8 9区别 endnote7_SAT和ACT的区别,你知道吗?