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

新手问2个有关问题!

2013-01-17 
新手问2个问题!!1..如果以个类中的全局变量 map对象class cls{ public:mapint,Object_map}在方法中;;v

新手问2个问题!!
1..如果以个类中的全局变量 map对象

class cls
{
 public:
   map<int,Object>  _map;
};

在方法中;; 
   void fun()
   {
      Object obj;
      _map[1] = obj;
    }

以上 obj是不是在出方法后;对象会自动销毁掉呢?;; 如果销毁掉  会不会 map里也会没值得;


2. 如何删除一个map对象呢?? 不用迭代器
   
    比如我会的一个key值为 5;  我要删除 key为5的;  _map.erase(5)//error ;  如何删除。不用迭代器


3. 多线程问题

如果2个线程 分别 执行 fun1  fun2 方法;; 以下情况是不是永远会在一个方法里执行,,不会离开临界区啊;

 void fun1()
{
  EnterCriticalSection(cs)

     while(1)
      {
          获取消息
          处理消息
      }
  LeaveCriticalSection(&cs);
}
  

void fun2()
{
    EnterCriticalSection(cs)

     while(1)
      {
          获取消息
          处理消息
      }
  LeaveCriticalSection(&cs);
}
[解决办法]
1、cls类需要提高拷贝构造函数
2、需要迭代器,用find
3、临界区放在while里
[解决办法]

引用:
引用:1、cls类需要提高拷贝构造函数
2、需要迭代器,用find
3、临界区放在while里


1. 第一个为什么要 拷贝函数呢??

对象消失,map存的是你对象的拷贝
[解决办法]

/*2. 如何删除一个map对象呢?? 不用迭代器
   
比如我会的一个key值为 5;  我要删除 key为5的;  _map.erase(5)//error ;  如何删除。不用迭代器*/
std::map<int,int>_map;
_map[5] = 10;
printf("%d,%d\n",_map[5],_map.size());
_map.erase(5);
printf("%d,%d\n",_map[5],_map.size());

[解决办法]
临界区(关键段)的用法可以参考《秒杀多线程第五篇 经典线程同步 关键段CS》
http://blog.csdn.net/morewindows/article/details/7442639

热点排行