读书人

新手问2个有关问题!

发布时间: 2013-01-17 10:28:54 作者: rapoo

新手问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

读书人网 >C++

热点推荐