gpt4 book ai didi

C++ 为什么在我的类中添加析构函数会使我的类无法 move ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:25 24 4
gpt4 key购买 nike

编译器提醒我正在使用已删除的函数。 https://ideone.com/3YAIlA

#include <memory>
using namespace std;
class foo
{
public:
unique_ptr<int> p;
~foo()
{

}
};
int main()
{
foo a, b;
a = move(b);
return 0;
}

编译信息

prog.cpp: In function 'int main()':
prog.cpp:15:4: error: use of deleted function 'foo& foo::operator=(const foo&)'
a = move(b);


prog.cpp:3:7: note: 'foo& foo::operator=(const foo&)' is implicitly deleted because the default definition would be ill-formed:
class foo


prog.cpp:3:7: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]'

In file included from /usr/include/c++/5/memory:81:0,
from prog.cpp:1:


/usr/include/c++/5/bits/unique_ptr.h:357:19: note: declared here
unique_ptr& operator=(const unique_ptr&) = delete;

如果我删除析构函数,我的代码可以正常编译。 https://ideone.com/UFB18P

最佳答案

因为 that's what the standard says .当您开始添加特殊成员函数时,您会禁止自动生成其他一些成员函数。这与编写非默认构造函数意味着不会自动为您生成默认构造函数属于同一类规则。

添加这个:

foo& operator=(foo&&) = default;

关于C++ 为什么在我的类中添加析构函数会使我的类无法 move ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427154/

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