「Base() = delete;」でデフォルトコンストラクタを削除している目的は何でしょうか | UE4&5 Forum | Tech Stadium Forum

通知
すべてクリア

「Base() = delete;」でデフォルトコンストラクタを削除している目的は何でしょうか  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
04/01/2021 1:18 am  

BigOrSmallのコードの内容で1点、質問となります。

ファイル名:Base .h
「Base() = delete;」でデフォルトコンストラクタを削除している目的は何でしょうか。
(上記コードを記載する必要性が分からなかったので)


引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
04/01/2021 1:18 am  

Baseクラスは抽象クラスなので本体は存在がしないクラスです。
存在してはいけないクラスですのでコンストラクタが呼ばれないように関数を削除(delete function)したことが「Base() = delete;」の意味です。

関数を削除すると削除した関数を呼ぶ時にコンパイルエラーが発生しますので結果、コンストラクタが呼ばれれない = 生成できないことになります。

抽象クラスはc++、java, python等、オブジェクト指向プログラミングで重要な概念ですのでちゃんと理解しておきましょう。
グーグルで検索すれば抽象クラスに関して色々なドキュメントを見えます。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
04/01/2021 1:19 am  

ご回答ありがとうございます。
抽象クラスでは、コンストラクタは呼ばれない(インスタンス化してはいけない)こと承知しました。

関連してもう1点質問になりますが、
同ファイルで、引数付きの方(「Base(const State state) : state_(state) {}」)は、
設定していても問題ない理由は何なのでしょうか。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
04/01/2021 1:19 am  

そのコンストラクタはBaseを継承するクラスのインスタンスを作るために使いますので問題ありません。

例えばGameクラスのコンストラクタには
Game() : Base(State::Game) {}

こんな風に使っています。

Baseを継承してるGameクラスを初期化するために使っています。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
04/01/2021 1:20 am  

ご回答ありがとうございます。上記のような書き方ができるのですね。
CppProjectsのファイルを編集して試したところ、同じ挙動になること確認できました。


返信引用
共有:
タイトルとURLをコピーしました