相关疑难解决方法(0)

向量中的不可复制元素

我有一个不可复制的类(即复制构造函数和赋值运算符被标记为'delete').我想将它们保存在std :: vector中.

它是一个RAII类,所以简单地存储指针或引用它不是我想要的.

我对新的初始化列表和移动构造函数的了解有限,这可能吗?

c++ stl move-semantics c++11

15
推荐指数
1
解决办法
7200
查看次数

将互斥锁置于容器条目上的安全有效方法

C++ std::mutex没有移动构造函数.这是有充分理由的.基本上,移动构造函数本身通常不是线程安全的,并且互斥体的全部意义在于多个线程将尝试同时访问它.

不幸的是,互斥不能直接放入容器中.容器需要能够安全地移动其内容,而您不能使用互斥锁.

简单的方法是用一个单独的互斥锁保护整个容器.但是假设我想要比那更精细的控制?如果我通过容器(例如:)实现数据库std::map,那么想要锁定单个记录的能力似乎是合理的,而不仅仅是整个数据库.

我想到的下一件事就是通过使用来破解问题std::unique_ptr.那会编译,但它并没有真正改变基本问题,是吗?移动存在问题的情况是,在使用该容器条目时,容器thread1更改会导致条目移动thread2.在这种情况下,thread2可能很容易最终持有一个被破坏的条目或智能指针.似乎无论如何,你最终都必须在做任何事情之前用互斥锁锁定整个容器.

似乎应该有一个已知的习惯用于做这些事情.

c++ multithreading stl c++11

14
推荐指数
1
解决办法
2061
查看次数

在C++中插入容器时如何处理不可复制的对象

我正在寻找处理不可复制对象的最佳实践.

我有一个互斥类,显然不应该是可复制的.我添加了一个私有拷贝构造函数来强制执行.

这破坏了代码 - 有些地方只需要修复,但我有一个通用的问题,一个类,使用互斥量作为数据成员,或通过继承,被插入到容器中.

这通常发生在容器初始化期间,因此互斥锁尚未初始化,因此可以,但没有复制构造函数它不起作用.更改容器以包含指针是不可接受的.

有什么建议吗?

c++ noncopyable

12
推荐指数
2
解决办法
8918
查看次数

标签 统计

c++ ×3

c++11 ×2

stl ×2

move-semantics ×1

multithreading ×1

noncopyable ×1