【发布时间】:2020-10-07 17:02:58
【问题描述】:
我有一个像这样的 POD 结构
struct foo {
std::mutex m_foo_mutex;
int a;
int b;
int c;
//......
};
它有比这更多的字段,但结构应该很明显。当然,默认的复制 ctor 格式不正确,因为 std::mutex 的复制 ctor 是 delete。
复制这个对象并给复制的对象一个新的互斥体对我来说非常好。所以我在foo 中定义了类似的东西。
foo(const foo &foo2) : m_foo_mutex() {
a = foo2.a;
b = foo2.b;
c = foo2.c;
//.......
}
这一切都很好,但是当这个结构有 20 多个字段时它就很丑了,通常编译器会对我隐藏它。有没有更简洁的方式来表达这一点,还是我被这个又大又丑的构造函数卡住了?
【问题讨论】:
-
为什么你不能把你的班级分成 _unsafe (POD) 和 safe {mutex + pod)?
-
我可能不清楚你的意思 - 但安全类不会还有这个问题吗?或者你的意思是安全类是不可复制的,而 _unsafe 类没有互斥锁?
-
该结构不是 POD!
-
你的例子看起来不像平常。通常我们使互斥体成员可变,并在复制构造函数中锁定源对象的互斥体,以实现在复制时没有其他线程争相写入它。所以编译器无论如何也无法生成它。
-
您遇到的问题是设计缺陷的信号。
标签: c++ copy-constructor