我的单例类中有些东西需要在游戏结尾释放,但是cocos找不到游戏结尾的函数?
具体一点,哪个单例类?
一般都会有remove系列函数,或者destroy函数。
析构函数 或 OnExit函数呗
我在AppDelegate::~AppDelegate()这里释放的
自己定义的单例类
游戏结束的时候不是Direct的End的函数吗?
class Singleton{
public:
static Singleton& Instance(){
static Singleton instance;
return instance;
}
//main退出后会自动释放
~Singleton(){}
private:
Singleton();
};
— Begin quote from ____
引用第6楼wo370506875于2015-03-16 10:57发表的 :
class Singleton{
public:
static Singleton& Instance(){
static Singleton instance;
return instance;
… http://www.cocoachina.com/bbs/job.php?action=topost&tid=288440&pid=1259037
— End quote
我写了一个,你看看,不知道有没有问题,编译通过:
//头文件
class Test {
private:
Test() {}
static Test *ptr;
public:
static Test *getInstance() {
if (ptr == nullptr)
ptr = new Test;
return ptr;
}
static void destroyInstance() {
if (ptr != nullptr)
delete ptr;
ptr = nullptr;
}
};
//cpp文件
Test *Test::ptr = nullptr;
你这个写法还是得自己释放,我那块是个静态变量在程序栈上的,程序会自己回收的。
那你把我的destroyInstance中的代码放在destructor中试试看。
你得明白一件事啊
int x//这个X会在作用域结束后自动释放
int* x = new int//这个得手动。
可以这么写
class Singleton{
public:
static Singleton& Instance(){
static Singleton instance;
return instance;
}
//main退出后会自动释放
~Singleton(){ delete x; }
private:
Singleton(){
x = new int(5);
}
int * x;//你的指针
};
单例 一搬不释放。
参考了cocos的源代码,它们大部分单例类都在Direct中的end中释放
我自己修改了Director,添加了回调列表,专门用来释放自己定义的单例类
修改引擎后面可就麻烦了,是下下下下策
你说游戏"结尾"的时候 ,是指游戏"退出"的时候吗?如果你说的是游戏退出而不是游戏场景退出的话,那么你可以将你的单例的destory放到导演的析构里
是的,以后跟换底层就要改了,但是coco底层不提供,那得自己写了
恩,现在就是这样子做得
如何没提供?~AppDelegate()不行??