C++箴言:避免析構函數(shù)調用虛函數(shù)

字號:

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