是否有办法抑制全局对象(特别是vector
和unordered_map
等集合类型的析构函数)的生成,或者在不调用此类析构函数的情况下退出程序(但是仍在冲洗stdout,因为我收集abort
不这样做?
答案 0 :(得分:4)
我相信你正在寻找quick_exit和_Exit。
答案 1 :(得分:2)
最简单的方法是在堆上创建它们,永远不要释放:
std::vector< int > *doNotCallDestructor = new std::vector< int >;
//...
答案 2 :(得分:2)
这是一种可以通过按需初始化来稳健解决的问题。
std::vector<int> & get_my_vector () {
static std::vector<int> *vec;
if (vec) return *vec;
return *(vec = new std::vector<int>);
}
在多线程上下文中,您可以使用“双重检查锁定”来初始化静态,或者如果您有C ++ 11,则保证以下内容是线程安全的:
std::vector<int> & get_my_vector () {
static std::vector<int> *vec = new std::vector<int>;
return *vec;
}
按需初始化可带来以下好处:
按需初始化与用于在Singleton模式中实例化单例的技术相同。因为我们没有限制vector<int>
的实例数量,所以这个成语在任何意义上都不是单身人士。