博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多个so中模板单例的多次实例化
阅读量:5987 次
发布时间:2019-06-20

本文共 1053 字,大约阅读时间需要 3 分钟。

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

 

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

template
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
T * CSingleT
::ms_pObject = NULL;

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

 

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

 

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

 

参考:

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

你可能感兴趣的文章
部署 dubbo + zookeeper
查看>>
Mac 下使用 ffmpeg 制作 gif
查看>>
sql重写后比较是否一致
查看>>
(1)安全权限的设置 (2)共享权限的设置 (3)如何确定用户对文件的最终权限...
查看>>
如何做好产品讲解
查看>>
SlidingMenu侧滑菜单栏的使用
查看>>
H3C的S5120 WEB开启过程
查看>>
OpenStack镜像格式转换
查看>>
python模块pymysql
查看>>
IOS UIScrollView详解 & 图片缩放功能
查看>>
北京第三家面试录音总结
查看>>
wrap 属性
查看>>
Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pdf文档内容...
查看>>
ds存储上增加lun的容量,aix下的相应卷组大小怎么自动增加
查看>>
linux 常用命令
查看>>
初探Linux内核
查看>>
php中的$_REQUEST和$_SERVER
查看>>
zookeeper学习笔记-基本用法进阶
查看>>
vim 文本编辑器
查看>>
正确计算linux系统内存使用率
查看>>