はじめまして、少し疑問に思ったのでお聞きしたいにですが、
以下のコードではテンポラリオブジェクトが作成されるのでしょうか?
Ctrl1とCtrl2は同じクラス型です。
このクラスには「HWND型」に対して変換コンストラクタが定義してあるものとします。
GetHWND()はウィンドウのハンドルを返します。
Ctrl2 = Ctrl1.GetHWND(); //一つ目コード
Ctrl1.GetHWND() //二つ目のコード
開発環境はWin2000 VC++6.0 MFCは使いません。
どうかご教授願います。
コンストラクタ・デストラクタの動いた回数を勘定すればわかるんじゃないかしら。
コンストラクタとデストラクタにブレークポイントを設置して
デバッガでトレースしてみて気づいたんですが一つ目のコードでは
thisの値がCtrl2のアドレスとは異なるんです。
これがテンポラリオブジェクトなんでしょうか?
>thisの値がCtrl2のアドレスとは異なるんです。
そもそも一つ目のコードで、Ctrl2に関してコンストラクタもデストラクタも走らない
はずですよね。
> そもそも一つ目のコードで、Ctrl2に関してコンストラクタも
> デストラクタも走らないはずですよね。
なぜ?
> そもそも一つ目のコードで、Ctrl2に関してコンストラクタも
> デストラクタも走らないはずですよね。
確かにCtrl2に関しては動いていないみたいです。
テンポラリオブジェクトの変換コンストラクタが動いた後に
Ctrl2にコピーされているみたいです。
しかし、初期化のときはちゃんとCtrl2の変換コンストラクタが起動しています。
二つ目のコードについてはMSDNにかいてありました。
>επιστημηさん
Ctrl2に関してコンストラクタが走るんですか?
Ctrl2ってクラス名じゃなくて、以前にコンストラクトが完了している
インスタンス名ですよね?
Ctrl2にoperator =(HWND)が無ければ
テンポラリ作成->Ctrl2に代入
ってことになるんじゃないでしょうか。
やっぱりテンポラリオブジェクトが作成されていたんですね
おかげてなぜかウィンドウのハンドルが破棄されてしまう謎が解けました
どうもありがとうございました。