提问人:LeXav 提问时间:2/17/2023 最后编辑:DailyLearnerLeXav 更新时间:2/20/2023 访问量:174
C++ - 叮叮当当抱怨 X 规则?
C++ - clang tidy complain about rule of X?
问:
此代码在 clang tidy 中引发警告:
类“Locker”定义非默认析构函数,但不定义复制构造函数、复制赋值运算符、移动构造函数或移动赋值运算符clang-tidy(cppcoreguidelines-special-member-functions)
这是更新后的结构,根据注释:
struct Locker
{
std::binary_semaphore *sem = nullptr;
// ----------------------------------
// Methods
// ----------------------------------
auto try_lock(std::binary_semaphore &sem_, u32 time_in_seconds = 1) -> bool;
auto manual_release() -> void;
// ----------------------------------
// Deleted
// ----------------------------------
Locker(Locker &) = delete;
Locker(Locker &&) = delete;
Locker(std::binary_semaphore &&sem_) noexcept = delete;
Locker(std::binary_semaphore &sem_) noexcept = delete;
Locker(std::binary_semaphore *sem_) noexcept = delete;
Locker() noexcept = default;
auto operator=(std::binary_semaphore &sem_) noexcept -> Locker & = delete;
auto operator=(std::binary_semaphore &&sem_) noexcept -> Locker & = delete;
auto operator=(std::binary_semaphore *sem_) noexcept -> Locker & = delete;
// ----------------------------------
// Destructor
// ----------------------------------
~Locker()
{
manual_release();
}
};
我不想要任何构造函数,但我想要一个特定的析构函数。 我们有方法可以尝试锁定,破坏者只需干净地释放锁,确保一切正常。
请注意,GCC 12.2 与
-Wall -Wextra -pedantic -pedantic-errors -Werror -Wuninitialized -Wtrivial-auto-var-init -Wshadow -Wnormalized -Wno-error=comment
甚至不打扰。
如何抑制该警告?
谢谢!
编辑:
下面是复制情况的 godbolt 链接,有人可以纠正我的代码并在这里分享链接吗?链接到 clang-tidy 结构问题
答:
1赞
463035818_is_not_an_ai
2/17/2023
#1
主要是在阿空加瓜和n.m.的帮助下,我们发现了你的误解是什么。
这有错误的签名:
Locker( Locker &) = delete;
Copy 构造函数采用 .而你不做任务。这些是五个:const Locker&
delete
Locker(const Locker &) = delete;
Locker(Locker &&) = delete;
Locker& operator=(const Locker&) = delete;
Locker& operator=(Locker&&) = delete;
~Locker() {
std::cout << "";
}
如果显式声明它们,则警告应该消失:https://godbolt.org/z/eP8TrE9b1
下一个:什么是三分法则?
评论
= default
=default