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

View: Fix calling virtual function from the destructor #282

Merged

Conversation

ma8ma
Copy link
Collaborator

@ma8ma ma8ma commented May 16, 2020

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

cppcheckのレポート

src/article/articleview.h:46:14: warning: Virtual function 'save_session' is called from destructor '~ArticleViewMain()' at line 78. Dynamic binding is not used. [virtualCallInConstructor]
        void save_session() override;
             ^
src/article/articleview.cpp:78:5: note: Calling save_session
    save_session();
    ^
src/article/articleview.h:46:14: note: save_session is a virtual function
        void save_session() override;
             ^
src/board/boardview.h:21:14: warning: Virtual function 'save_session' is called from destructor '~BoardView()' at line 54. Dynamic binding is not used. [virtualCallInConstructor]
        void save_session() override;
             ^
src/board/boardview.cpp:54:36: note: Calling save_session
    if( ! SESSION::is_quitting() ) save_session();
                                   ^
src/board/boardview.h:21:14: note: save_session is a virtual function
        void save_session() override;
             ^

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

cppcheckのレポート
```
src/article/articleview.h:46:14: warning: Virtual function 'save_session' is called from destructor '~ArticleViewMain()' at line 78. Dynamic binding is not used. [virtualCallInConstructor]
        void save_session() override;
             ^
src/article/articleview.cpp:78:5: note: Calling save_session
    save_session();
    ^
src/article/articleview.h:46:14: note: save_session is a virtual function
        void save_session() override;
             ^
src/board/boardview.h:21:14: warning: Virtual function 'save_session' is called from destructor '~BoardView()' at line 54. Dynamic binding is not used. [virtualCallInConstructor]
        void save_session() override;
             ^
src/board/boardview.cpp:54:36: note: Calling save_session
    if( ! SESSION::is_quitting() ) save_session();
                                   ^
src/board/boardview.h:21:14: note: save_session is a virtual function
        void save_session() override;
             ^
```
@ma8ma ma8ma added the bug バグの追跡 label May 16, 2020
@ma8ma ma8ma merged commit 73c3336 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 view-fix-calling-virtual-function-from-dtor branch May 16, 2020 06:55
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