0

调用map::count初始化的空weak_ptr保险箱是否安全?

我对 c++ 仍然非常缺乏经验,并且没有技能来确定这一点。

在我的应用程序中, aweak_ptr被作为 a 中的键,map并且必须首先通过值找到。如果找不到,weak_ptrreturn编辑并使用未初始化的map::count.

代码

设置

map<my_ptr, connection_data, owner_less<my_ptr>> m_connections;
typedef map<my_ptr, connection_data, owner_less<my_ptr>>::iterator it;

按数据查找

my_ptr get_my_ptr_from_data(string data){
    my_ptr my_ptr_to_send;
    for(it iterator = my_ptrs.begin(); iterator != my_ptrs.end(); iterator++) {
        if(iterator->second.data == data){
            my_ptr_to_send = iterator->first;
            break;
        }
    }
    return my_ptr_to_send;
}

发现

my_ptr found_ptr = get_my_ptr_from_data(data);
if(my_ptrs.count(found_ptr) ){
4

1 回答 1

4

调用find(and count) 是安全的,只要您定义的任何顺序不依赖于非空指针。find(and ) 对参数做的唯一事情就是count将它用作比较器的参数。

但是,weak_ptr在关联容器中用作键并不安全。如果它过期了,那么容器的顺序就会被破坏,之后尝试使用容器会给出未定义的行为。

于 2014-04-18T14:34:09.323 回答