【发布时间】:2014-01-12 10:01:49
【问题描述】:
我正在尝试创建一个 int 到 int 的映射,但程序崩溃了,我不知道为什么。 我已经将问题总结为这个简短的简单代码。
当程序启动时,由于 Utilities 成员 _instance 是静态的 - 它通过转到其构造函数来对其进行初始化,该构造函数包含一行:一个 int 到 int(简单)映射分配。但随后它崩溃了。
请注意,如果我注释该行,程序不会崩溃, 并且 main 包含相同的行。 所以我的两个问题是:
1) 为什么会崩溃?这种行为背后有什么意义吗?
2) 如何修复它以便在构造函数中初始化地图?
谢谢
#include <map>
class Utilities
{
public:
~Utilities(){};
static Utilities& instance();
private:
Utilities();
Utilities( const Utilities& ){};
static Utilities _instance;
static std::map<int, int> textIntToIntMap;
};
Utilities Utilities::_instance = Utilities();
std::map<int, int> Utilities::textIntToIntMap;
Utilities::Utilities()
{
//The following line crashes, why?
textIntToIntMap[1] = 2;
}
int main()
{
static std::map<int, int> text2;
text2[4] = 2;
int xxx = 3;
}
【问题讨论】:
-
为单例类定义复制构造函数真的没有意义。如果有的话,您只想声明它,而不是定义它,以明确防止复制。
标签: c++