正在使用空weak_ptr作为参数安全调用map::count

Is calling map::count with an empty weak_ptr as argument safe?

本文关键字:参数 安全 map count 调用 ptr weak      更新时间:2023-10-16

在未初始化因而为空的weak_ptr保险箱上调用map::count安全吗?

我对c++仍然很缺乏经验,也没有确定这一点的技能。

在我的应用程序中,weak_ptr被作为密钥保存在map中,并且必须首先通过值找到。如果找不到,则未初始化的weak_ptr将被return初始化并在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) ){

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

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