C++箴言:避免析構(gòu)函數(shù)調(diào)用虛函數(shù)

字號:

假設(shè)你有一個為股票交易建模的類層次結(jié)構(gòu),例如買單,賣單,等等。為該類交易建立審計系統(tǒng)是非常重要的,這樣的話,每當(dāng)創(chuàng)建一個交易對象,在審計登錄項上就生成一個適當(dāng)?shù)娜肟陧?。這看上去不失為一種解決該問題的合理方法:
    class Transaction {// 所有交易的基類
    public:
    Transaction();
    virtual void logTransaction() const = 0;//建立依賴于具體交易類型的登錄項
    ...
    };
    Transaction::Transaction() //實現(xiàn)基類的構(gòu)造函數(shù)
    {
    ...
    logTransaction(); //最后,登錄該交易
    }
    class BuyTransaction: public Transaction {
    // 派生類
    public:
    virtual void logTransaction() const; //怎樣實現(xiàn)這種類型交易的登錄?
    ...
    };
    class SellTransaction: public Transaction {
    //派生類
    public:
    virtual void logTransaction() const; //怎樣實現(xiàn)這種類型交易的登錄?
    ...
    };