No.3ベストアンサー
- 回答日時:
構造体やクラスは変数名を宣言しなくても構造体名だけでオブジェクトが作られます。
普通はこのような一時オブジェクトは宣言と同時にデストラクタが呼ばれてすぐに消えてしまいます。
ただ一時オブジェクトを参照した場合はその参照先が消えるまで一時オブジェクトのデストラクタは呼ばれないのでご質問のように関数の引数として一時オブジェクトを使うことが出来るのです。
関数から戻った時点で引数に使った一時オブジェクトのデストラクタが呼ばれることになります。
No.4
- 回答日時:
簡単なテストコードを書いて試してみてはどうでしょうか?
実際の動きをみるほうが理解が進みますよ。
サンプル)
#include <iostream>
class hoge
{
public:
hoge(int) { std::cout << " コンストラクタ" << std::endl; }
~hoge() { std::cout << " デストラクタ" << std::endl; }
void test() { std::cout << " メソッド" << std::endl; }
};
void moge(hoge* p)
{
std::cout << " 関数スタート" << std::endl;
p->test();
std::cout << " 関数エンド" << std::endl;
}
int main()
{
std::cout << "呼び出し前" << std::endl;
moge(&hoge(0));
std::cout << "呼び出し後" << std::endl;
}
No.2
- 回答日時:
明示的にコンストラクタを呼び出して一時的に作成したオブジェクトを渡すという構文です。
このとき作成されたオブジェクトはD3DXMatrixLookAtLH関数から戻ったあと自動的に消滅します。
C++の「一時オブジェクト」という仕組みです。
No.1
- 回答日時:
以下のソースは変数宣言を必要としない。
typedef struct _t {
int i;
int j;
} t_str;
void func(t_str *);
int main(void)
{
func(malloc(sizeof(t_str)));
}
もちろん
typedef struct _t {
int i;
int j;
} t_str;
void func(t_str *);
int main(void)
{
t_str *a;
a = malloc(sizeof(t_str));
func(a); //aはここでしか使わない
}
と書いても良いが、2度と使わない変数aを宣言する意味があるだろうか?
同様に
D3DXMatrixLookAtLH(結果を返す構造体,&D3DXVECTOR3(,,,),&D3DXVECTOR3(,,,),&D3DXVECTOR3(,,,))
では、第2~4引数は「2度と使わない」ので、コンストラクタが返したポインタをそのまま渡す方が良い事になる。
C++では「構造体オブジェクトもクラスオブジェクトの一種」であるので、コンストラクタが存在する。
この回答への補足
すみません説明不足でした。
自分が言いたかったのは
D3DXMatrixLookAtLH(...,&D3DXVECTOR3 m_d3dxvector3(,,),&D3DXVECTOR3 m_d3dxvector3(,,),&D3DXVECTOR3 m_d3dxvector3(,,))のように使わなければいけないと思うのですが、
D3DXMatrixLookAtLH(&D3DXVECTOR3(,,),&D3DXVECTOR3(,,),&D3DXVECTOR3(,,))
何故、このように使えるのでしょうか?という事です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Object型からDouble型へのキャスト
-
VBA 同じ名前のオブジェクトを...
-
Visual Studioでのbmpファイル...
-
EXCEL VBAにて動的にCheckBOXを...
-
ManagedDirectXを使った半透明...
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
Rangeオブジェクトを一時的に作...
-
開始日(Date型)から終了日(Date...
-
COMコンポーネントって何?
-
複数のドキュメントテンプレー...
-
ADO オブジェクトの渡し方
-
戻り値がクラスオブジェクト
-
VBAからノーツを起動
-
Webアプリケーションのエラーメ...
-
オブジェクトに値を保持させる...
-
Excelファイルをgrep検索したい
-
質問すいません。 javascriptの...
-
エプソンVP-930のESC/Pの操作に...
-
Servlet上でのClass#forName()...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
VBA 同じ名前のオブジェクトを...
-
Excelで =EMBED("Acrobat Docu...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
EXCEL VBAにて動的にCheckBOXを...
-
時間帯判定をする。
-
ビジュアルC++でボタンの有...
-
COMコンポーネントって何?
-
Object型からDouble型へのキャスト
-
error C2712: オブジェクト ア...
-
LISTBOXの内容が更新されま...
-
ワイルドカード<?>と型パラメー...
-
戻り値がクラスオブジェクト
-
bmp画像をjpegやpng画像に圧縮...
-
VBAからノーツを起動
-
ワードで画像をドロップすると...
-
Accessの連結・非連結オブジェ...
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
おすすめ情報