1

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 ページにあります。

4

0 に答える 0