private constructor? 静态工厂?

今天卡在了这样一段代码里:

Thread ** m_ppThreads;      (code 1)

……

m_ppThreads = new Thread*[NUM];    (code 2)

其中,Thread是一个构造函数为private的类:

class Thread{

private:

Thread(…….) { …… }

public:

Thread * create_obj(……) { …… }

……

};

由于Thread类的构造函数是私有的,因此只能通过其提供的一个静态函数接口创建该类的对象。

对于code 2,我感到疑惑的地方在于:Thread类的构造函数函数是私有的,而new一个Thread数组是必定会调用Thread类的构造函数,这样会造成编译时出错。实际上,code 2所做的并不是new一个Thread数组,而是new一个Thread类的指针数组,new的是指针而不是类。因此,code 2并不会出错:-)

附注:

在网上搜索了一下关于private constructor的资料,发现这种奇怪的类是专用于实现设计模式(design pattern)里说的singlton pattern(中文叫什么?)。通过静态函数创建类实例,又叫静态工厂方法。这样可以控制创建类实例时的行为,使得全局范围内仅创建有限个实例。

Advertisements

About chill

不再执意欢喜反倒让人欢喜
This entry was posted in TECH. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s