【发布时间】:2023-04-03 15:35:01
【问题描述】:
在uninitialized thus empty weak_ptr 保险箱上调用map::count 是否安全?
我对 c++ 还很缺乏经验,也没有能力确定这一点。
在我的应用程序中,weak_ptr 被保存为 map 中的键,并且必须首先通过值找到。如果找不到,则未初始化的weak_ptr 为returned 并在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) ){
【问题讨论】:
-
std::weak_ptr是否定义了比较语义?我不这么认为 -
您能多演示一下您的实际代码吗?我感觉你在问一个 XY 问题。
-
@Gracchus:它按预期工作-直到其中一个元素过期,并破坏了地图的顺序。然后你有未定义的行为,因为你已经打破了地图的先决条件之一。您不能安全地使用
weak_ptr作为密钥。 -
与this基本相同
标签: c++ map initialization find weak-ptr