zoukankan      html  css  js  c++  java
  • effective c++ 9: Never call virtual functions during construction or destruction

    因为base class的构造函数的执行早于derived class,所以如果在构造函数里调用virtual函数,很可能derived class部分的成员变量还没初始化。并且在derived class对象的base class构造期间,对象是被看做一个base class对象的,所以显然调用virtual函数不会达到想象的效果。

    比较好的方式是把原本在构造函数中调用的virtual函数改为non-virtual,并通过derived lass构造函数传递信息给baseclass构造函数。

    比如:

    class Transaction {
    public:
        explicit Transaction(const std::string& logInfo);
        void logTransaction(const std::string& logInfo) const;
    
        ...
    };
    
    Transaction::Transaction(const std::string& logInfo) {
        ...
        logTransaction(logInfo); //non-virtual call
    }
    
    class BuyTransaction: public Transaction {
    public:
        BuyTransaction( parameters) : Transaction(createLogString(parameters)) {//把log信息传给了base class的构造函数
        ...
    }
    ...
    private:
        static std::string createLogString(parameters);//注意是static,这也避免了derived class对象的成员变量尚未初始化的情况
    };
  • 相关阅读:
    PHP-会话控制
    PHP-文件上传
    PHP-文档目录
    PHP-正则表达式
    PHP-数组类型
    PHP-函数编程
    PHP-基础知识
    $_FILES系统函数
    话说 MAX_FILE_SIZE
    Hello~! 我的blog
  • 原文地址:https://www.cnblogs.com/parapax/p/3649529.html
Copyright © 2011-2022 走看看