テンポラリオブジェクトについて – プログラミング – Home

テンポラリオブジェクトについて
 
通知
すべてクリア

[解決済] テンポラリオブジェクトについて


ラジアン
 ラジアン
(@ラジアン)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

はじめまして、少し疑問に思ったのでお聞きしたいにですが、
以下のコードではテンポラリオブジェクトが作成されるのでしょうか?

 Ctrl1とCtrl2は同じクラス型です。
 このクラスには「HWND型」に対して変換コンストラクタが定義してあるものとします。
 GetHWND()はウィンドウのハンドルを返します。

 Ctrl2 = Ctrl1.GetHWND(); //一つ目コード
 Ctrl1.GetHWND()      //二つ目のコード

開発環境はWin2000 VC++6.0 MFCは使いません。

どうかご教授願います。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

コンストラクタ・デストラクタの動いた回数を勘定すればわかるんじゃないかしら。


返信引用
ラジアン
 ラジアン
(@ラジアン)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

コンストラクタとデストラクタにブレークポイントを設置して
デバッガでトレースしてみて気づいたんですが一つ目のコードでは
thisの値がCtrl2のアドレスとは異なるんです。
これがテンポラリオブジェクトなんでしょうか?


返信引用
すがり
 すがり
(@すがり)
ゲスト
結合: 22年前
投稿: 6
 

>thisの値がCtrl2のアドレスとは異なるんです。

そもそも一つ目のコードで、Ctrl2に関してコンストラクタもデストラクタも走らない
はずですよね。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> そもそも一つ目のコードで、Ctrl2に関してコンストラクタも
> デストラクタも走らないはずですよね。

なぜ?


返信引用
ラジアン
 ラジアン
(@ラジアン)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

> そもそも一つ目のコードで、Ctrl2に関してコンストラクタも
> デストラクタも走らないはずですよね。

確かにCtrl2に関しては動いていないみたいです。
テンポラリオブジェクトの変換コンストラクタが動いた後に
Ctrl2にコピーされているみたいです。
しかし、初期化のときはちゃんとCtrl2の変換コンストラクタが起動しています。

二つ目のコードについてはMSDNにかいてありました。


返信引用
すがり
 すがり
(@すがり)
ゲスト
結合: 22年前
投稿: 6
 

>επιστημηさん

Ctrl2に関してコンストラクタが走るんですか?
Ctrl2ってクラス名じゃなくて、以前にコンストラクトが完了している
インスタンス名ですよね?


返信引用
ax
 ax
(@ax)
ゲスト
結合: 22年前
投稿: 10
 

Ctrl2にoperator =(HWND)が無ければ
テンポラリ作成->Ctrl2に代入
ってことになるんじゃないでしょうか。


返信引用
ラジアン
 ラジアン
(@ラジアン)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

やっぱりテンポラリオブジェクトが作成されていたんですね
おかげてなぜかウィンドウのハンドルが破棄されてしまう謎が解けました
どうもありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました