Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NodeTreeBase: Fix calling virtual function from the destructor #279

Merged

Conversation

ma8ma
Copy link
Collaborator

@ma8ma ma8ma commented May 16, 2020

NodeTreeXXXはデストラクタ内で仮想関数clear()を呼び出していますが、仮想関数はデストラクタ内で派生クラスの関数として呼び出しできないためcppcheckに警告されます。
そのためスコープ解決演算子を使ってクラスを明示します。

cppcheckのレポート

src/dbtree/nodetree2chcompati.h:30:14: warning: Virtual function 'clear' is called from destructor '~NodeTree2chCompati()' at line 36. Dynamic binding is not used. [virtualCallInConstructor]
        void clear() override;
             ^
src/dbtree/nodetree2chcompati.cpp:36:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetree2chcompati.h:30:14: note: clear is a virtual function
        void clear() override;
             ^
src/dbtree/nodetreejbbs.h:34:14: warning: Virtual function 'clear' is called from destructor '~NodeTreeJBBS()' at line 45. Dynamic binding is not used. [virtualCallInConstructor]
        void clear() override;
             ^
src/dbtree/nodetreejbbs.cpp:45:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetreejbbs.h:34:14: note: clear is a virtual function
        void clear() override;
             ^
src/dbtree/nodetreemachi.h:40:14: warning: Virtual function 'clear' is called from destructor '~NodeTreeMachi()' at line 46. Dynamic binding is not used. [virtualCallInConstructor]
        void clear() override;
             ^
src/dbtree/nodetreemachi.cpp:46:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetreemachi.h:40:14: note: clear is a virtual function
        void clear() override;
             ^
src/dbtree/nodetreebase.h:267:22: warning: Virtual function 'clear' is called from constructor 'NodeTreeBase(const std::string&url,const std::string&date_modified)' at line 96. Dynamic binding is not used. [virtualCallInConstructor]
        virtual void clear();
                     ^
src/dbtree/nodetreebase.cpp:96:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetreebase.h:267:22: note: clear is a virtual function
        virtual void clear();
                     ^
src/dbtree/nodetreebase.h:267:22: warning: Virtual function 'clear' is called from destructor '~NodeTreeBase()' at line 135. Dynamic binding is not used. [virtualCallInConstructor]
        virtual void clear();
                     ^
src/dbtree/nodetreebase.cpp:135:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetreebase.h:267:22: note: clear is a virtual function
        virtual void clear();
                     ^

NodeTreeXXXはデストラクタ内で仮想関数clear()を呼び出していますが
仮想関数はデストラクタ内で派生クラスの関数として呼び出しできないため
cppcheckに警告されます。そのためスコープ解決演算子を使ってクラスを
明示します。

cppcheckのレポート
```
src/dbtree/nodetree2chcompati.h:30:14: warning: Virtual function 'clear' is called from destructor '~NodeTree2chCompati()' at line 36. Dynamic binding is not used. [virtualCallInConstructor]
        void clear() override;
             ^
src/dbtree/nodetree2chcompati.cpp:36:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetree2chcompati.h:30:14: note: clear is a virtual function
        void clear() override;
             ^
src/dbtree/nodetreejbbs.h:34:14: warning: Virtual function 'clear' is called from destructor '~NodeTreeJBBS()' at line 45. Dynamic binding is not used. [virtualCallInConstructor]
        void clear() override;
             ^
src/dbtree/nodetreejbbs.cpp:45:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetreejbbs.h:34:14: note: clear is a virtual function
        void clear() override;
             ^
src/dbtree/nodetreemachi.h:40:14: warning: Virtual function 'clear' is called from destructor '~NodeTreeMachi()' at line 46. Dynamic binding is not used. [virtualCallInConstructor]
        void clear() override;
             ^
src/dbtree/nodetreemachi.cpp:46:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetreemachi.h:40:14: note: clear is a virtual function
        void clear() override;
             ^
src/dbtree/nodetreebase.h:267:22: warning: Virtual function 'clear' is called from constructor 'NodeTreeBase(const std::string&url,const std::string&date_modified)' at line 96. Dynamic binding is not used. [virtualCallInConstructor]
        virtual void clear();
                     ^
src/dbtree/nodetreebase.cpp:96:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetreebase.h:267:22: note: clear is a virtual function
        virtual void clear();
                     ^
src/dbtree/nodetreebase.h:267:22: warning: Virtual function 'clear' is called from destructor '~NodeTreeBase()' at line 135. Dynamic binding is not used. [virtualCallInConstructor]
        virtual void clear();
                     ^
src/dbtree/nodetreebase.cpp:135:5: note: Calling clear
    clear();
    ^
src/dbtree/nodetreebase.h:267:22: note: clear is a virtual function
        virtual void clear();
                     ^
```
@ma8ma ma8ma added the bug バグの追跡 label May 16, 2020
@ma8ma ma8ma merged commit 678376e into JDimproved:master May 16, 2020
@ma8ma ma8ma added this to Done in State of JDim-v0.3.0+ via automation May 16, 2020
@ma8ma ma8ma deleted the nodetreebase-fix-virtual-function-from-dtor branch May 16, 2020 05:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug バグの追跡
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

None yet

1 participant