在C 11中删除复制和分配构造函数



我经常看到删除的代码1)复制ctor和2)分配ctor。

这样做的优势是什么?

i附加示例代码。

class A{
    ...
    private:
        A(const A& copy) = delete;
        A &operator=(const A &assign) = delete;
};

它可以防止该类被复制或分配。

例如,当您拥有具有m_p指针作为该类拥有的成员变量的A类时,它很有用(A类负责Deallocation)。在这种情况下,您无法安全复制或分配A类。因为编译器生成的复制构造函数和分配运算符将在您想删除指针时共享该指针的所有权,并在destructor中分享您的所有权通过释放释放指针而获得的双重削弱或访问违规行为。

如果您的情况不想创建类的副本,则通过制作复制构造函数和分配运算符private或将其标记为delete来限制这一点。

  • 当您要创建一个具有多个类副本的config类或缓存时,这很有用。
  • 在标准库中,Strems不能副本可构造且可分配。

相关内容

最新更新