我知道我可以声明析构函数=delete
或private
以防止程序在范围结束隐含删除对象。 我也知道,如果是私人的,我可以有一个成员函数可以显式调用每当我把它叫做析构函数: void kill() { this–>~A(); }
void kill() { this–>~A(); }
我的问题是:
为什么我会永远想阻止破坏含蓄? 请举一个例子
什么会
=delete
吗? 它确保析构函数永远不会运行? 因此,该对象将永远存在的范围之内?
我知道我可以声明析构函数=delete
或private
以防止程序在范围结束隐含删除对象。 我也知道,如果是私人的,我可以有一个成员函数可以显式调用每当我把它叫做析构函数: void kill() { this–>~A(); }
void kill() { this–>~A(); }
我的问题是:
为什么我会永远想阻止破坏含蓄? 请举一个例子
什么会=delete
吗? 它确保析构函数永远不会运行? 因此,该对象将永远存在的范围之内?
就像一个私人的析构函数成语一般用于防止其他程序员从您的类型来执行某些操作。 特别是私人析构函数阻止以下内容:
做任何这些都将提升一个编译错误,是不平凡的解决。 该错误通常是从作者到用户,他们不应该执行一个或所有这些操作,而不是作者可能他们想要的消息:
考虑编写管理的硬件接口,允许用户简单地删除实例可能离开硬件不希望的状态的类型 - 那为什么还要允许吗? 是的,在某些时候的API可以建立抽象掉这个难题 - 但在某些基层“脆弱”的功能需要暴露。
=删除是“新”防弹防止用户错误的方式。 不同于私人拷贝构造函数无法通过“朋友”关键字来规避。 它也往往读更好,因为它讲述的代码以一致的方式将用户,此功能不可用。 我的理解是,=删除在C ++ 11引入了“无复制/没有删除成语”的替代品。