复制或移动具有成员std :: mutex(或其他不可复制对象)的类的构造函数?

橙色果汁冰糕
class A
{
private:
    class B
    {
    private:
        std::mutex mu;
        A* parent = NULL;
    public:
        B(A* const parent_ptr): parent(parent_ptr) {}
        B(const A::B & b_copy) { /* I thought I needed code here */  }
    };
public:
    B b = B(this); //...to make this copy instruction work. 
                   // (Copy constructor is deleted, need to declare a new one?)
};

我有一个B基本上是线程安全任务队列的类。它包含一个deque,一个mutex和一个condition_variable它促进了该类启动的任何两个线程之间的消费者/生产者关系A我已经尽可能简化了代码。

问题始于拥有amutex作为成员:这将删除默认的副本构造函数。这仅仅意味着我可以构造使用,B(this)但是我不能构造复制使用B b = B(this),这是我在最后一行中要做的,以便给class的类A成员B解决此问题的最佳方法是什么?

道格65536

一种简单的解决方案是std::unique_ptr<std::mutex>在您的类中使用a ,并使用构造函数参数(如果有)std::make_unique(...)在哪里对其...进行初始化std::mutex

这将允许移动,但不能复制。为了使其可复制,您需要在副本构造函数中初始化副本,并假设副本应具有自己的锁。

如果副本应共享该锁,则应使用std::shared_ptr那是可复制和可移动的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

复制其他对象值的复制构造函数

来自分类Dev

具有自动默认值和移动构造函数的不可复制类

来自分类Dev

复制具有指针作为成员变量的类的构造函数

来自分类Dev

复制具有原子成员的类的构造函数

来自分类Dev

具有 const 向量成员的类的复制构造函数

来自分类Dev

是否可以让“命名构造函数”返回私有构造的,不可移动的,不可复制的std :: optional <T>?

来自分类Dev

具有模板化构造函数以及复制和移动构造函数的类

来自分类Dev

在没有复制构造函数的对象的成员函数中启动 std::thread

来自分类Dev

复制构造函数错误:对象具有与成员函数不兼容的类型限定符

来自分类Dev

具有shared_ptr成员的C ++复制构造函数

来自分类Dev

具有shared_ptr成员的C ++复制构造函数

来自分类Dev

将类的所有成员复制到当前对象

来自分类Dev

复制具有列表成员的对象列表

来自分类Dev

如何使用不可复制类的向量(或其他容器)?

来自分类Dev

(复制构造函数)作为参数传递来初始化另一个对象的对象如何访问私有成员?

来自分类Dev

(复制构造函数)作为参数传递来初始化另一个对象的对象如何访问私有成员?

来自分类Dev

具有成员函数的G ++ may_alias

来自分类Dev

具有成员函数的关联数组

来自分类Dev

具有成员函数的关联数组

来自分类Dev

当“移动”对象在联合中有一个“非平凡”成员时,为什么强制复制构造函数?

来自分类Dev

将具有unique_ptr的类的构造函数作为成员复制到抽象类

来自分类Dev

typedef以下类型:指向成员函数Fof的,具有成员函数F的“ any”类的指针

来自分类Dev

复制在C ++中具有自指针的类的构造函数?

来自分类Dev

复制构造函数未从类对象获取数组大小

来自分类Dev

引用具有禁用的复制构造函数/分配的对象

来自分类Dev

如何将unique_ptr的移动构造函数和运算符实现为类的私有成员

来自分类Dev

不可复制的对象,映射和shared_ptr:复制构造函数中的错误

来自分类Dev

不可复制的对象,映射和shared_ptr:复制构造函数中的错误

来自分类Dev

抽象类可以在C ++ 11中具有构造函数和私有成员吗

Related 相关文章

  1. 1

    复制其他对象值的复制构造函数

  2. 2

    具有自动默认值和移动构造函数的不可复制类

  3. 3

    复制具有指针作为成员变量的类的构造函数

  4. 4

    复制具有原子成员的类的构造函数

  5. 5

    具有 const 向量成员的类的复制构造函数

  6. 6

    是否可以让“命名构造函数”返回私有构造的,不可移动的,不可复制的std :: optional <T>?

  7. 7

    具有模板化构造函数以及复制和移动构造函数的类

  8. 8

    在没有复制构造函数的对象的成员函数中启动 std::thread

  9. 9

    复制构造函数错误:对象具有与成员函数不兼容的类型限定符

  10. 10

    具有shared_ptr成员的C ++复制构造函数

  11. 11

    具有shared_ptr成员的C ++复制构造函数

  12. 12

    将类的所有成员复制到当前对象

  13. 13

    复制具有列表成员的对象列表

  14. 14

    如何使用不可复制类的向量(或其他容器)?

  15. 15

    (复制构造函数)作为参数传递来初始化另一个对象的对象如何访问私有成员?

  16. 16

    (复制构造函数)作为参数传递来初始化另一个对象的对象如何访问私有成员?

  17. 17

    具有成员函数的G ++ may_alias

  18. 18

    具有成员函数的关联数组

  19. 19

    具有成员函数的关联数组

  20. 20

    当“移动”对象在联合中有一个“非平凡”成员时,为什么强制复制构造函数?

  21. 21

    将具有unique_ptr的类的构造函数作为成员复制到抽象类

  22. 22

    typedef以下类型:指向成员函数Fof的,具有成员函数F的“ any”类的指针

  23. 23

    复制在C ++中具有自指针的类的构造函数?

  24. 24

    复制构造函数未从类对象获取数组大小

  25. 25

    引用具有禁用的复制构造函数/分配的对象

  26. 26

    如何将unique_ptr的移动构造函数和运算符实现为类的私有成员

  27. 27

    不可复制的对象,映射和shared_ptr:复制构造函数中的错误

  28. 28

    不可复制的对象,映射和shared_ptr:复制构造函数中的错误

  29. 29

    抽象类可以在C ++ 11中具有构造函数和私有成员吗

热门标签

归档