gpt4 book ai didi

c++ - 具有互斥成员的默认 move 构造函数

转载 作者:太空狗 更新时间:2023-10-29 19:47:35 24 4
gpt4 key购买 nike

我有一个带有删除的复制构造函数的类,我正试图将互斥成员放在这样的地方:

struct A {
A(const A &other) = delete;
A& operator=(const A &other) = delete;
A(A&& other) = default;
A& operator=(A &&other) = default;

std::mutex lock;
};

编译器提示我正在尝试调用已删除的复制构造函数,我总结这是由于 std::mutex 类型不可 move 。我怎样才能使互斥成员以最少的麻烦与 move 构造函数一起玩?我实际上并不想将互斥锁成员本身 move 到新构造的对象中,实际上我希望每个 move 的对象只构造它自己的互斥锁

最佳答案

I don't actually want to move the mutex member itself into the newly constructed object, and would actually like each moved object to just construct it's own mutex

然后简单地定义你的 move 构造函数来构造一个新的互斥量:

struct A {
A(const A &other) = delete;
A& operator=(const A &other) = delete;
A(A&& other)
: lock()
{
}

A& operator=(A &&other) = delete;

std::mutex lock;
};

move 分配仍然是一个问题,可能应该被删除。除非你能回答这个问题:当你被分配一个新值时,现有的互斥锁成员会发生什么?特别是:如果在现有互斥​​体被锁定的情况下为您分配了一个新值怎么办?

关于c++ - 具有互斥成员的默认 move 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55517673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com