为什么在Singleton类中使用私有析构函数?

时间:2016-06-05 13:11:25

标签: c++ singleton

我已经看到构造函数,复制构造函数,析构函数和赋值运算符保存在典型的单一类中的私有范围内。 e.g。

<input type="text" placeholder="Year" ng-model="yu" uib-datepicker-popup="yyyy"
   ng-click="open()"
   class="form-control" 
   is-open="opened" show-button-bar="false"
   datepicker-options="dateOptionsForYear"/>

现在,我的问题是

为什么要将析构函数和赋值运算符保密 范围?这是强制性的吗?

公共析构函数是否会破坏单例类的任何属性?  因为我们的对象构造受到限制所以没有  不可能破坏的可能性。

我可以理解私人任务操作员可以阻止自我  分配,但公共任务操作员无论如何都会受到伤害  比额外的运行时间?

2 个答案:

答案 0 :(得分:8)

将析构函数设为私有可能会阻止某人尝试在指向单例的指针上调用delete

auto& singleton = CMySingleton::Instance();
auto pointer_to_singleton = &singleton;
delete pointer_to_singleton;  // Bad!

禁用赋值运算符可防止无害但无意义的自我赋值。见this answer。如果有人这样做,很可能,这是一个错误,所以你也可以防止它。

答案 1 :(得分:-1)

私有析构函数在这里没有任何用处。

对于复制构造函数和赋值运算符,您已经通过在显示的代码中努力地再现它们旁边的注释来回答您自己的问题。只需阅读评论。唯一要添加的是,这段代码必须在C ++ 11之前,因为现在你只需删除它们。

相关问题