2011/09/27

[C++]参照もforward classでOKなの?

Qtの魅力は、画面作成をGUIでできることじゃなかろうか。
昔の私は「GUIで作ると汎用過ぎて描画が遅くなるじゃろう」と相手にしなかったのだが、歳をとった。
作りやすさと、メンテナンスの容易さ、そして組み込み機器の高速化など、いろいろな要因があるのじゃ。

 

まあ、それはいいや。

 

Qt Labのページを見ながら、ブラウザを作ってみた。
うん、書いてあるとおりにやるだけでたいがいのことはできそうだ。

さて、ここでURLを扱うQUrlというクラスを扱う必要があった。
引数なのだが、参照型だ。

func(const QUrl& url)

こんなの。
説明には「class QUrl; がいる」とあるのだが、ポインタならまだしも、参照も同じようにやれるのか?

まあ、やってみると確かにそうだった。
参照って、どういう解決のされ方をしてるんだろう?

ポインタの場合、引数はアドレス値を渡すだけだから、ポインタ型の一般的なサイズさえわかればいい。
だから名前解決するだけのforward class(クラスの前方参照、という訳でいいのか?)でよいのだ。

実体の場合、コピー渡しになるので、classのサイズがわからないとスタックを使う量が決まらない。
なので、includeが必要になる。

参照は、既に存在するメモリをそのまま使うので、スタックは必要ない。
そういう意味ではポインタと同じような扱いになりそうだ。アドレスを渡す必要もないけど、結果としてはアドレスなのかな?
あるいはレジスタでそのまま・・・とかはコンパイラレベルの話になりそうだ。

気にはなるが、もう寝よう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。