iam*_*ind 7 c++ destructor compiler-errors unique-ptr c++11
以下是代码的极简主义问题:
struct B {
B () = default;
//~B () {}; // error: use of deleted function ‘B& B::operator=(const B&)’
std::unique_ptr<int> m_pB = nullptr;
};
int main ()
{
std::vector<B> vB;
vB.erase(vB.begin());
}
Run Code Online (Sandbox Code Playgroud)
除非析构函数被取消注释,否则上面的代码编译得很好.根据我的要求,我需要有一个~B()明确定义的主体.
如何unique_ptr在同一个类中共存来定义析构函数体?
注意:尝试= default复制和移动构造函数的定义版本无济于事.在我的真实代码中,unique_ptr<int>是unique_ptr<forward_declared_class>.无法在SO中找到此问题,但我确信它必须存在.随意标记为傻瓜.
好像你的代码需要B复制可构造和复制可分配std::vector(至少对于我测试过的visual c ++).
复制构造函数和复制分配运算符只能是= delete因为std::unique_ptr(声明的实现也= default应该导致函数被删除),并且通过实现析构函数,您禁用移动构造函数和移动赋值运算符的默认实现.
因此,您需要显式声明移动赋值运算符.尝试:
#include <memory>
#include <vector>
struct B {
B () = default;
~B () {}
B& operator=(B&&) = default;
std::unique_ptr<int> m_pB = nullptr;
};
int main ()
{
std::vector<B> vB;
vB.erase(vB.begin());
}
Run Code Online (Sandbox Code Playgroud)