小编Fat*_*unk的帖子

"错误:使用已删除的函数"在移动构造函数中调用unique_ptr上的std :: move时

#include <memory>

class A
{
public:
    A()
    {
    }

    A( const A&& rhs )
    {
        a = std::move( rhs.a );
    }

private:
    std::unique_ptr<int> a;
};
Run Code Online (Sandbox Code Playgroud)

此代码将无法使用g ++ 4.8.4进行编译,并引发以下错误:

error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>
::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_de
lete<int>]’
     a = std::move( rhs.a );
       ^
Run Code Online (Sandbox Code Playgroud)

据我所知,unique_ptr的复制构造函数和复制赋值构造函数已被删除,无法调用,但我想std::move在这里使用我会调用移动赋值构造函数.官方文档甚至显示了这种类型的任务正在完成.

我的代码中有什么问题我没看到?

c++ move c++11

9
推荐指数
1
解决办法
2870
查看次数

模式匹配选项时引用类型不兼容的匹配臂引发错误

我对 Rust 相当陌生,无法解决这个令人困惑的错误。

我只是想匹配aOptionget函数返回的 a HashMap。如果返回一个值,我想增加它,否则我想向地图添加一个新元素。

这是代码:

let mut map = HashMap::new();
map.insert("a", 0);
let a = "a";
match map.get(&a) {
    Some(count) => *count += 1,
    None => map.insert(a, 0),
}
Run Code Online (Sandbox Code Playgroud)

由此产生的错误:

let mut map = HashMap::new();
map.insert("a", 0);
let a = "a";
match map.get(&a) {
    Some(count) => *count += 1,
    None => map.insert(a, 0),
}
Run Code Online (Sandbox Code Playgroud)

我真的不知道该编译器抱怨什么类型的约在这里,因为这两个SomeNone是同一枚举类型的两个组成部分。谁能解释编译器对我的代码有什么问题?

hashmap pattern-matching optional rust

5
推荐指数
1
解决办法
1172
查看次数

标签 统计

c++ ×1

c++11 ×1

hashmap ×1

move ×1

optional ×1

pattern-matching ×1

rust ×1