正在使用空weak_ptr作为参数安全调用map::count
Is calling map::count with an empty weak_ptr as argument safe?
在未初始化因而为空的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
作为键是不安全的。如果它过期,那么容器的顺序就被破坏了,之后尝试使用容器将产生未定义的行为。
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 类型安全可变参数函数
- 编译器在 const ref 类型参数上使用临时对象时是否应该警告不安全的行为?
- 提供带有常量参数的函数指针作为带有非常量参数的函数指针是否安全?
- C++:传递像 unique_ptr:get() 这样的参数来函数是否安全?
- 使用安全模式从DLL(通过(INTPTR)参数传递到该函数)获取char **
- C 11-当我将局部变量作为参数传递到线程中时,它是否安全
- 如何要求接口中参数的线程安全
- 为什么我可以通过这样的字符串参数?这种样式安全吗?
- 与构造函数参数相关的异常安全的习语
- 键入安全字符串参数
- 在传递的对象即将被销毁之前,发出将QObject指针作为参数传递的信号是否安全
- Visual Studio 2015 错误 C4996"std::_Copy_impl":使用可能不安全的参数进行函数调用
- 如何干净地创建类型安全的枚举参数
- 使用可变参数模板创建传递新对象的更安全方式是否是个好主意
- 错误 C4996:"std::_Copy_impl":使用可能不安全的参数进行函数调用
- 在C++中丢弃模板参数安全吗
- c++函数参数安全
- 正在使用空weak_ptr作为参数安全调用map::count