多个so中模板单例的多次实例化
在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中模板单例的多次实例化相关推荐
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- 在Python中创建单例
这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...
- 笔记:Java中的单例设计模式
之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...
- Javascript中的单例和模块模式
在javascript中,单例(singleton)就是指只有一个实例的对象,而不需要用new关键字去创建一个对象示例.单例其实有点类似于C# /C++里面的静态类.在javascript中,是以对象 ...
- spring框架中的单例Beans是线程安全的么?
看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...
- Spring框架中的单例Beans是线程安全的么
看到这样一个问题:Spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...
- Spring源码 - 从缓存中获取单例Bean
# Spring源码 - 从缓存中获取单例Bean Spring版本:Spring 5.3.13-release # 1.从缓存中获取单例Bean 单实例Bean在Spring的同一个容器中只会创建一 ...
- 【单例】JAVA中的单例
单例模式,属于创建类型的一种常用的软件设计模式.通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例. Java中单例模式定义:& ...
- 关于跨dll的模板单例问题
C++的模板可以帮助我们编写适合不同类型的模板类,给代码的复用性提供了极大的方便.近来写了一个涉及单例的C++模板类,简化下来可以归结为以下的代码: 1 2 3 4 5 6 7 8 9 10 11 t ...
最新文章
- Linux基础命令---添加/删除组
- 2018年自主车企销量目标完成情况 这几家企业估计要凉
- 【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库
- ATL 实现定制的 IE 浏览器栏、工具栏和桌面工具栏
- combox简单用法
- TracePro模拟
- Axure 软件自带的图标元件Icons无法显示的问题解决方法
- IC学习笔记9——多比特信号的跨时钟域处理方法之“MUX/DMUX同步器”
- RPC:RPC的通信流程
- 对称加密和非对称加密!
- 前端程序员用css动画给女朋友一个惊喜
- 第7.21节 Python抽象类—register注册虚拟子类
- 前端 头像右上角的数字标识(通常用作消息提示。。)
- java发送ipmsg_用Java向IPMSG发送消息
- 电脑报2013年第10期
- (全)SpringBoot学习笔记(狂神说java系列)
- 开篇 - 麒麟子全方位解读 Cocos Cyberpunk 工程源码
- C#上位机 ModbusRTU 03功能码
- Jquery easyui tree的使用
- iOS App 审核被拒的原因搜罗
热门文章
- 【毕设进行时-工业大数据,数据挖掘】Java GUI完善,左对齐
- Python简单主机批量管理工具
- 讲解ontouchstart、ontouchend、onclick区别和坑点
- 解决android.permission.WRITE_APN_SETTINGS
- spring冲刺第一天
- 为何断点不停 Application_Start()方法
- [轉]資料庫讀寫分離
- 计院生活--第二章 深入虎穴(下)
- ROS系统 服务数据的定义与使用
- 8 9区别 endnote7_SAT和ACT的区别,你知道吗?