在阅读 C++ Primer 第 4 版时,我被一个特定的代码片段弄糊涂了。有一个类定义如下:
// handle class to manage the Query_base inheritance hiearchy
class Query {
// these operators need access to the Query_base* constructor
friend Query operator~(const Query&);
friend Query operator|(const Query&, const Query&);
friend Query operator&(const Query&, const Query&);
public:
Query(const std::string&); // builds a new WordQuery
// copy control to manage pointers and use counting
Query(const Query &c) : q(c.q), use(c.use) { ++*use; }
~Query() { decr_use(); }
Query &operator=(const Query&);
// interface functions: will call corresponding Query_base operations
std::set<TextQuery::line_no>
eval(const TextQuery &t) const {return q->eval(t); }
std::ostream &display(std::ostream &os) const
{ return q->display(os); }
private:
Query(Query_base &query) : q(query),
use(new std::size_t(1)) { }
Query_base *q;
std::size_t *use;
void decr_use()
{ if (--*use == 0) { delete q; delete use; }
};
我的困惑是关于私有构造函数。为什么会在那里?我认为这是为了防止使用 Query_base 对象初始化 Query 对象,但是他们为什么要定义构造函数呢?有人请澄清一下,谢谢。
注意:如果你想看书中的课程,它在第 614 页。