Мне нужно защитить доступ к структуре данных в моем классе. Поскольку я не могу иметь мьютекс (потому что я не могу его скопировать), я рассматриваю возможность использования shared_ptr и сохранения мьютекса. Вот пример кода моей идеи:boost :: shared_ptr boost :: mutex и copy constructor
class Sample {
typedef boost::lock_guard<boost::mutex> AcquireLock;
boost::shared_ptr<boost::mutex> mutt;
public:
Sample() : mutt(new boost::mutex) {}
void Method()
{
AcquireLock lock(*mutt);
//do some work here
}
};
У меня есть следующие вопросы:
- Является ли это плохая практика, чтобы использовать мьютекс таким образом (как член класса, через shared_ptr)?
- Должен ли я иметь конструктор копирования для этого класса, так как он имеет память, выделенную в куче через shared_ptr?
EDIT: Возможно, мне нужно дать немного больше деталей: Я создам этот объект только один раз и сохраню его в std :: vector. Мне не нужно делать копии, и если вектор должен делать копии, я не хочу иметь разные мьютексы для каждой копии. Вот почему я думаю, что конструктор копирования будет работать для меня.
У меня будут копии, потому что я сохраню объект в std :: vector и использую его оттуда. Кроме того, я не буду делать никаких копий, поэтому я думаю, что для меня будет работать конструктор экземпляров по умолчанию. Мне интересно, если мелкая копия испортит счетчик ссылок или что-то подобное, что вызовет проблемы в будущем. –
Почему бы не сохранить shared_ptr объекта Sample в векторе, тогда вам не нужно беспокоиться о копировании объекта Sample –