gpt4 book ai didi

c++ - boost::shared_ptr boost::mutex 和复制构造函数

转载 作者:太空狗 更新时间:2023-10-29 21:27:15 24 4
gpt4 key购买 nike

我需要保护对类(class)数据结构的访问。因为我不能有互斥量(因为我不能复制它),所以我正在考虑使用 shared_ptr 并将互斥量保留在那里。这是我的想法的示例代码:

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 在堆上分配内存?

编辑:也许我需要提供更多细节:我只会创建这个对象一次并将其保存在 std::vector 中。我不需要复制它,如果 vector 需要复制,我不想为每个拷贝使用不同的互斥量。这就是为什么我认为复制构造函数对我有用。

最佳答案

这种方法非常有效且合法,但请注意,随着类(class)的发展,您可能希望将相同的技术应用于更多的类(class)成员。这就是为什么我建议您考虑利用 pImpl 习惯用法:

// in hpp:
class Sample
{
Impl();
private:
struct Impl;
// compiler generated copy-constructor will copy only this shared_ptr
shared_ptr<void> pImpl_;
};

// in cpp:
struct Sample::Impl
{
mutex mut_;
// put here whatever members you need, extend Impl without affecting the Sample interface
};

Impl::Impl() : pImpl_(new Impl)
{}

关于c++ - boost::shared_ptr boost::mutex 和复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9483657/

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