为了账号安全,请及时绑定邮箱和手机立即绑定

在类中将构造函数私有化有什么用?

在类中将构造函数私有化有什么用?

湖上湖 2019-10-24 14:16:36
为什么要在类中将构造函数设为私有?因为我们总是需要构造函数公开。
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

您可能需要私有构造函数的一些原因:

  1. 只能从类本身内部的静态工厂方法访问构造函数。Singleton也可以属于此类别。

  2. 一个实用程序类,仅包含静态方法。


查看完整回答
反对 回复 2019-10-24
?
长风秋雁

TA贡献1757条经验 获得超7个赞

通过提供私有构造函数,可以防止在此类之外的任何地方创建类实例。提供这种构造函数有几种用例。


答:您的类实例是在static方法中创建的。static然后将该方法声明为public。


class MyClass()

{

private:

  MyClass() { }


public:

  static MyClass * CreateInstance() { return new MyClass(); }

};

B.你的课是单身。这意味着程序中最多只能有一个类实例。


class MyClass()

{

private:

  MyClass() { }


public:

  MyClass & Instance()

  {

    static MyClass * aGlobalInst = new MyClass();

    return *aGlobalInst;

  }

};

C.(仅适用于即将到来的C ++ 0x标准)您有几个构造函数。其中一些被宣布public,另一些被宣布private。为了减小代码大小,公共构造函数会“调用”私有构造函数,这些私有构造函数依次完成所有工作。public因此,您的构造函数称为委托构造函数:


class MyClass

{

public:

  MyClass() : MyClass(2010, 1, 1) { }


private:

  MyClass(int theYear, int theMonth, int theDay) { /* do real work */ }

};

D.您想限制对象复制(例如,由于使用共享资源):


class MyClass

{

  SharedResource * myResource;


private:

  MyClass(const MyClass & theOriginal) { }

};

E.您的课程是实用程序课程。也就是说,它仅包含static成员。在这种情况下,程序中永远都不能创建对象实例。


查看完整回答
反对 回复 2019-10-24
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

留下一个“后门”,该后门允许另一个朋友类/函数以用户禁止的方式构造对象。我想到的一个例子是构造迭代器(C ++)的容器:


Iterator Container::begin() { return Iterator(this->beginPtr_); }

// Iterator(pointer_type p) constructor is private,

//     and Container is a friend of Iterator.


查看完整回答
反对 回复 2019-10-24
  • 3 回答
  • 0 关注
  • 1057 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信