質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1392閲覧

メンバ変数のnew無しコンストラクタが自動的に呼び出される仕様について

siguma0013

総合スコア9

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/05/06 11:46

現在Qtを勉強しており、C++の言語仕様なのかQtのライブラリ仕様なのか、わからなくなってしまい質問しました。

あるクラスのインスタンス生成後にメンバ変数使用する際コンストラクタを呼び出さずに使用が可能でした。
以下コードであればQNetworkAccessManagerを使用する際、いきなりスタティックでないメンバ変数にアクセスできた。

C++

1// 一部抜粋 2class Sample : public QObject 3{ 4 Q_OBJECT 5public: 6 explicit Sample(QObject *parent = nullptr); 7 ~Sample(); 8 9private: 10 QNetworkAccessManager manager; 11}

この動作がC++の言語仕様なのかQtのライブラリ仕様なのかご存じの方がいれば教えていただきたいです。

そして、もし可能であればそういった記述のあるページor検索ワードを教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

メンバ変数のnew無しコンストラクタが自動的に呼び出される

という記述から、ありがちな勘違いにハマっているご様子です。
C++では、クラス型変数を定義したら必ずコンストラクタが呼ばれます。どのコンストラクタが呼ばれるのかは変数定義方法によります。

newの動作は、当該クラスを記録できるだけのサイズのメモリをヒープから確保し、その先頭アドレスを渡してコンストラクタを呼び出します。
FooClass foo;のような定義は、その文脈によってグローバル領域、スタック領域、ヒープ領域のどこかに当該クラスを記録できるだけのサイズのメモリを確保し、その先頭アドレスを渡してコンストラクタを呼び出します。

これはC++の仕様です。

そういった記述のあるページor検索ワードを教えていただけると幸いです。

江添亮のC++入門
に書かれてました。
新しいC++に対応した入門解説は少ないですが、江添氏はC++仕様に詳しいので網羅的にかかれているだろうと思います。

投稿2019/05/06 13:29

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

この動作がC++の言語仕様なのか

はい、C++の動作仕様として、(一部を除く)クラス型の変数は、宣言して初期化しなかった場合に自動でデフォルトコンストラクタが呼ばれます(参考)。


なお、C++では他のオブジェクト指向言語と違い、QNetworkAccessManager manager;というように変数を宣言すると、この変数に入っている値はオブジェクトそのものであるとされて、オブジェクトと変数を切り離す方法はありません。

投稿2019/05/06 11:53

編集2019/05/06 11:55
maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問