调用map::count
安全吗?在 uninitialized thus empty weak_ptr
上安全吗?
我对 C++ 仍然很缺乏经验,也没有确定这一点的技能。
在我的应用程序中,weak_ptr
被保存为 map
中的键,必须首先通过值找到它。如果找不到,未初始化的 weak_ptr
将被返回
并在 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
用作关联容器中的键是不安全的。如果它过期,则容器的顺序被破坏,之后尝试使用该容器将产生未定义的行为。
关于c++ - 使用空的 weak_ptr 作为参数调用 map::count 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23156079/