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

为什么要在类中将构造函数设为私有?因为我们总是需要构造函数公开。

人到中年有点甜
浏览 802回答 3
3回答

幕布斯6054654

您可能需要私有构造函数的一些原因:只能从类本身内部的静态工厂方法访问构造函数。Singleton也可以属于此类别。一个实用程序类,仅包含静态方法。

汪汪一只猫

通过提供私有构造函数,可以防止在此类之外的任何地方创建类实例。提供这种构造函数有几种用例。答:您的类实例是在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成员。在这种情况下,程序中永远都不能创建对象实例。

qq_遁去的一_1

留下一个“后门”,该后门允许另一个朋友类/函数以用户禁止的方式构造对象。我想到的一个例子是构造迭代器(C ++)的容器:Iterator Container::begin() { return Iterator(this->beginPtr_); }// Iterator(pointer_type p) constructor is private,//     and Container is a friend of Iterator.
打开App,查看更多内容
随时随地看视频慕课网APP