gpt4 book ai didi

c++ - 删除的构造函数

转载 作者:行者123 更新时间:2023-11-27 23:58:00 25 4
gpt4 key购买 nike

我一直在关注这个关于并发的视频系列,那个人刚刚开始谈论关键部分。我们制作了一个名为“auto_lock”的模板类(我将只包含麻烦的部分:

class auto_lock
{

T& m_lock;
public:
auto_lock(auto_lock& const) = delete;
auto_lock(auto_lock&&) = delete;
auto_lock& operator=(auto_lock& const) = delete;
auto_lock& operator=(auto_lock&&) = delete;
auto_lock(T& lock) throw() :
m_lock{ lock }
{
m_lock.enter();
}
};

我在这个类中也有同样的错误(我又一次只包含了代码中有问题的部分):

class critical_section
{
CRITICAL_SECTION m_lock;

public:

critical_section(critical_section& const) = delete;
critical_section& operator=(critical_section& const) = delete;
critical_section& operator=(critical_section&&) = delete;
critical_section(critical_section&&) = delete;

critical_section() throw()
{
InitializeCriticalSection(&m_lock);
}
};

在我的主要功能中:

int main()
{
auto lock = critical_section {}; //error here
{
auto guard = auto_lock<critical_section>{ lock };//and here
}
};

具体的错误是“critical_section::critical_section(critical_section &&)”(在第 42 行声明)不能被引用——它是一个被删除的函数'和“auto_lock::auto_lock(auto_lock &&) [with T=关键部分]”。'我该怎么办?

最佳答案

这就是 Almost Always Auto 失败的地方,因为这些类型是不可复制和不可移动的。

int main()
{
critical_section lock{};
{
auto_lock<critical_section> guard{ lock };
}
}

(如果你不喜欢这个,等待 C++17 强制复制省略实现)

为什么需要拷贝?因为虽然此代码不太可能制作拷贝,但复制/移动构造函数仍然必须可访问才能使代码正常工作。并且 auto lock = critical_section{};critical_section lock = critical_section{}; 相同

关于c++ - 删除的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41176515/

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