首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-09-14 
C++中怎么样可以做到让一个函数最后执行?下面代码中,怎么才能保证让lastExecute最后执行(在所有析构函数执

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(); }
};

热点排行