使用不可移动,不可复制的对象初始化unique_ptr

问题描述 投票:0回答:1

我有一个类,需要将其存储在unique_ptr的向量中。但是,我看到一个C2664错误,如下所示:“ AffinityThreadGroup :: AffinityThreadGroup(AffinityThreadGroup &&)无法将参数1从_Ty转换为“ const AFfinityThreadGroup&”。因为此类包含互斥量,所以它是不可移动且不可复制的。这种情况下使用unique_ptr的正确方法是什么?还是需要向类中添加什么其他实现?我试图调整复制构造函数并移动分配操作符而没有成功。

我以以下方式添加到向量中:myVec.emplace_back(std::make_unique<AffinityThreadGroup>(new AffinityThreadGroup));其中myVec为vector<unique_ptr<AffinityThreadGroup>> myVec;

class AffinityThreadGroup
{
private:
    std::vector<AffinityThread> threads;
    mutable boost::shared_mutex m;
    KAFFINITY maxValidBitMask;
    WORD maxValidCpuGroup;

    //...some functions

public:

    AffinityThreadGroup()
    {
        setMaxValidMask();
        setMaxValidCpuGroup();
    }




    ~AffinityThreadGroup() {}

    //...some functions

};'

c++ mutex smart-pointers unique-ptr move-semantics
1个回答
0
投票

在这种情况下,使用unique_ptr的正确方法是什么?

此:

std::make_unique<AffinityThreadGroup>();
© www.soinside.com 2019 - 2024. All rights reserved.