在下面的类中,我调用函数Register
并在map中成功添加值。然后我正在检查大小,它显示为预期的1。现在我在一些不同的操作后调用函数getServerObj
,我得到table
内容大小为零
20 class LocalDNServer
21 {
22 map<string,serverdetails*> table;
23
24 LocalDNServer()
25 {
26 }
27 static LocalDNServer* ins;
28 public:
29 ~LocalDNServer()
30 {
31 }
32 static LocalDNServer* getIns()
33 {
34 if(NULL == ins)
35 return new LocalDNServer();
36 return ins;
37 }
38 bool Register(const string& url, serverdetails* pServer)
39 {
40 printf("Calling register\n");
41 //table[url] = pServer;
42 table.insert(make_pair(url,pServer));// = pServer;
43 printf("Map size = %d\n", table.size());
44 }
45 serverdetails* getServerObj(const string& url)
46 {
47 printf("Map size @ func __FUNC__%s = %d\n", __FUNCTION__,table.size());
48 serverdetails* pT = table.find(url)->second;
49 printf("%s\n", (pT->ip).c_str());
50 exit(0);
51 //return table.find((string*)url.c_str())->second;
52 }
53 };
54
55 LocalDNServer* LocalDNServer::ins = NULL;
我的计划的运费code:
[root@readcpp proxy]# g++ -g main.cpp -o test
[root@readcpp proxy]# ./test
Implementation of proxy design pattern
Calling register
Map size = 1
Map size @ func __FUNC__getServerObj = 0
Segmentation fault
[root@readcpp proxy]#
任何人都可以指导为什么会这样吗?谢谢你的时间。
答案 0 :(得分:3)
我认为你的单例模式的实现可能存在问题。
select * from orders inner join urgent_orders on(DATE(orders.date ) = urgent_orders.date )
并不存储已分配的getIns()
,因此每次调用它时,都会获得一个新实例。
修正:
LocalDNSServer