私は問題を抱えており、その原因を知っていると確信しています。説明をお願いします。他のクラスを含むクラスがありますが、簡単にするために例を 2 つのクラスに制限します。
クラス A にはクラス B が含まれています。クラス A のコンストラクターでは、クラス B のコンストラクターを呼び出してクラス B を初期化します。クラス A のコンストラクタの最後に、クラス B のデストラクタが呼び出されますが、これは私が期待していた動作ではありませんでした。ここに例があります...
ああ
#include "b.h"
class a {
public:
b classB;
a(int someParam);
};
a.cpp
#include "a.h"
//Class A's constructor
a::a(int someParam) {
//Set class B by calling it's constructor
classB = b(someParam);
//Now class B's destructor gets called when exiting A's constructor...
}
「new」を使用せずに変数を宣言すると、現在のスコープを離れるときに破棄されることを知っています。しかし、それは変数のスコープに適用され、値を割り当てるスコープには適用されないと常に考えていました。それが問題ですよね?なら、やっclassB = *new b(someParam);
てもいいじゃないですか。それとも、代わりにポインターを使用する必要がありますか?