私の質問は実際には2つの部分から成っています。早い序文:私はC++を学んでおり、C#/ .NETのバックグラウンドから来ています。現在、オブジェクトの存続期間を理解しようとしていますが、以下に掲載されている結果は意味をなさないものです。私はそれが匿名のインスタンスの作成と関係があると思いますか?オブジェクトの構成、寿命、破壊の理解
質問1:デストラクタのすべてのメンバーを「空のオブジェクト」である可能性があるので処分することをお勧めしますか?
質問2:どうすればこの問題を防ぐことができますか? /この機能を使用するにはオブジェクトをどのように設計するのですか?
質問3:これは「正しい」/「正しい」方法ですか?
質問4:コード
#include <stdio.h>
class A
{
public:
A()
{
printf("Constructor A\n");
}
~A()
{
printf("Destructor A\n");
}
};
class B
{
public:
B()
{
a = A();
printf("Constructor B\n");
}
~B()
{
printf("Destructor B\n");
}
private:
A a;
};
int main(int argc, char* argv[])
{
B b;
b = B();
printf("Done");
// Breakpoint
/*
Output:
Constructor A
Constructor A
Destructor A
Constructor B
Constructor A
Constructor A
Destructor A
Constructor B
Destructor B
Destructor A
*/
}
そして、私が現在働いているプロジェクトから来ている他の例の非常に最後のビットにコメントを参照してください。
#include <stdio.h>
class Mesh
{
public:
Mesh()
{
printf("Constructing Mesh with data %d\n", data);
}
Mesh(int d)
{
data = d;
printf("Constructing Mesh with data %d\n", data);
}
~Mesh()
{
printf("Destructing Mesh with data %d\n", data);
}
private:
int data = 0;
};
class Game
{
public:
Game()
{
printf("Game constructor\n");
}
~Game()
{
printf("Game destructor\n");
}
void init()
{
int cool_data = 3;
mesh = Mesh(cool_data);
}
private:
Mesh mesh;
};
int main(int argc, char* argv[])
{
Game game = Game();
game.init();
printf("");
// Breakpoint
/*
Output:
Constructing Mesh with data 0 <-- I assume this comes from the private member declaration in the Mesh class? So declaration means initialization?
Game constructor
Constructing Mesh with data 3 <-- Okay that's what I expected since I'm creating a new instance of the Mesh class with "3" passed in
Destructing Mesh with data 3 <-- Why is the instance we JUST created immediately being destructed?
*/
}
「これがどうして起こるの? ??? –
^- つまり、これは* this *ですか? – StoryTeller
@JohnZwinck私の投稿を少し編集しました。もっと情報が必要な場合はお知らせください:) – mskc33