读书人

C++中如何样可以做到让一个函数最后执

发布时间: 2013-09-14 13:03:22 作者: rapoo

C++中怎么样可以做到让一个函数最后执行?
下面代码中,怎么才能保证让lastExecute最后执行(在所有析构函数执行完后再执行lastExecute)。非常感谢。

class CApp
{
public:
~CApp()
{
printf("Deconstruct CApp..\n");
}
};

CApp app1, app2;

void lastExecute()
{
printf("Last execute..\n");
}

int main()
{
return 0;
}
c++ class
[解决办法]
如果只是析构 后执行的话,
在执行析构函数体中加入函数接口调用就好

如果是main函数结束调用的话,

int atexit(void (*function)(void));
//这个接口函数会帮你

[解决办法]
class lastExecuteHelper
{
~lastExecuteHelper()
{
lastExecute();
}
};
lastExecuteHelper helper;

用一个全局变量,并且定义放在最前面,这样就能保证该变量最后被析构,析构时自动调用lastExecute
[解决办法]
在class CApp用1个static int 对类的实例计数,在构造函数、复制构造函数、operator= 中计数器+1
析构函数中计数器-1,同时检查值,如果是0就执行lastExecute()
[解决办法]
用嵌入汇编,main一开始就把函数地址压栈,参数压栈,这样main结束的时候ret就自动跳转到那里了吧。
汇编不熟,不能给出具体的代码。
[解决办法]
class LastExecutor {
public:
static LastExecutor& getInstance();
void addRef() { ++mRefCount; }
void release() { if (--mRefCount == 0) delete this; }
~LastExecutor() { ::lastExecute(); }
protected:
LastExecutor() : mRefCount(0) {}
private:
LastExecutor(const LastExecutor&);
LastExector& operator=(const LastExecutor&);
private:
unsigned mRefCount;
static LastExecutor *mpInstance;
};

LastExecutor *LastExecutor::pInstance = NULL;



LastExector& LastExecutor::getInstance()
{
if (NULL == mpInstance) {
mpInstance = new LastExecutor();
}
return *mpInstance;
}

class App1 {
public:
App1() { LastExecutor::getInstance().addRef(); }
virtual ~App1() { LastExecutor::getInstance().release(); }
};

读书人网 >C++

热点推荐