分享

关于全局对象初始化顺序

 文档集成 2014-04-14
跨编译单元的全局对象初始化顺序无法保证,也无法在main之前判断另一个编译单元中的全局对象是否已经被初始化,但是c++中的local static变量是可以确定在函数执行前确定其初始化的,因此在部分情况中可以使用local static来替代全局变量或辅助全局变量,以下是一个类工厂的代码,用到了此技巧:

std::map<std::string, CreateFunction>* ClassFactory::__clsMap;


void* ClassFactory::make(const char* name, const char* param)

{

    std::map<std::string,CreateFunction>::const_iterator it = __clsMap->find(name);

    if(it == __clsMap->end())

        return NULL;

    else {

        return (it->second(param));

    }

}


void ClassFactory::registerClass(const char* name,CreateFunction method)

{

    static std::map<std::string, CreateFunction> clsMap;

    clsMap.insert(std::make_pair(name, method));

    __clsMap = &clsMap;

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多