3 回答
TA贡献1876条经验 获得超7个赞
您可能需要私有构造函数的一些原因:
只能从类本身内部的静态工厂方法访问构造函数。Singleton也可以属于此类别。
一个实用程序类,仅包含静态方法。
TA贡献1898条经验 获得超8个赞
通过提供私有构造函数,可以防止在此类之外的任何地方创建类实例。提供这种构造函数有几种用例。
答:您的类实例是在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成员。在这种情况下,程序中永远都不能创建对象实例。
TA贡献1725条经验 获得超7个赞
留下一个“后门”,该后门允许另一个朋友类/函数以用户禁止的方式构造对象。我想到的一个例子是构造迭代器(C ++)的容器:
Iterator Container::begin() { return Iterator(this->beginPtr_); }
// Iterator(pointer_type p) constructor is private,
// and Container is a friend of Iterator.
添加回答
举报