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で質問しましょう!
似たような質問が見つかりました
- フリーソフト パソコンで、フォルダの最下層を探索してフォルダ名に連番を挿入するアプリを探しています。 例: アルフ 2 2023/06/09 22:04
- Excel(エクセル) スプレッドシートの関数 2 2022/11/16 17:36
- Visual Basic(VBA) C3とC4のセルに、Visual basicで実行した時入力した値をC3に表示させ、その後に、C3に 1 2023/07/14 09:43
- Excel(エクセル) エクセルのオートフィルについて質問があります。 2 2022/04/08 22:31
- Excel(エクセル) エクセル2019の関数を教えてください。 8 2022/12/16 12:45
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- その他(Microsoft Office) エクセルのマクロでスライサー教えてください。 1 2022/09/28 16:40
- Excel(エクセル) excelの数式の書き方について。 以下のような数式をSheet1に書いています。 Sheet1のB 1 2022/09/28 18:43
- Excel(エクセル) エクセルについて質問です 1 2022/12/10 11:49
- 車検・修理・メンテナンス ATFのD3相当で緑色って、 どのメーカーがありますかね? 1 2022/10/05 00:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
vb.net オブジェクト指向につい...
-
Excelで =EMBED("Acrobat Docu...
-
error C2712: オブジェクト ア...
-
ビジュアルC++でボタンの有...
-
プリコンパイルされたSQL文を取...
-
多人数のじゃんけんプログラム
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
JSPのout.printについて
-
Listに格納されているオブジェ...
-
空の文字列とnullと""
-
ADO オブジェクトの渡し方
-
VBA 同じ名前のオブジェクトを...
-
VBからBATファイルを起動して戻...
-
ワイルドカード<?>と型パラメー...
-
COMコンポーネントって何?
-
戻り値がクラスオブジェクト
-
エプソンVP-930のESC/Pの操作に...
-
Date型オブジェクトから日付の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
ワイルドカード<?>と型パラメー...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
LISTBOXの内容が更新されま...
-
Object型からDouble型へのキャスト
-
JAVAからHTMLへ値を返す方法
-
COMコンポーネントって何?
-
ビジュアルC++でボタンの有...
-
戻り値がクラスオブジェクト
-
VBA 同じ名前のオブジェクトを...
-
ASP.net 教えてください!!(...
-
Vbで通常使用するプリンターを...
-
newは明示的にした方が良いのか?
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
bmp画像をjpegやpng画像に圧縮...
-
Accessの連結・非連結オブジェ...
おすすめ情報