c++ - 使用空的 weak_ptr 作为参数调用 map::count 是否安全?

标签 c++ dictionary initialization find weak-ptr

调用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/

相关文章:

c++ - 是否有一种非间接、非 hack 的方法来保证 constexpr 函数只能在编译时调用?

python - 如何找到两个字典列表之间的区别?

dictionary - 为 Thunderbird 拼写检查添加新语言

struct init 的 C++ vector

c++ - 错误 : insufficient memory opencv

python - 字典中列表的长度(使用 defaultdict 创建字典)python

c - 在 C 结构数组中,结构初始化为什么?

c++ - 奇怪的堆栈粉碎错误 - 由未使用、未初始化的成员变量引起

Swift 编译器错误 : Segmentation-fault 11 thrown when using type constraints

c++ - 为什么协程的返回类型必须是可移动构造的?