dowhile さんが書きました:
書き直させて頂きます。
コード:
class FooA
{
public:
BOOL Func() { return TRUE; }
};
class FooB
{
public:
FooA* m_A;
void Update()
{
for (;;) {
if (m_A) {
if (m_A->Func()) break;
}
m_A = new FooA();
}
}
};
int main()
{
FooB fb;
fb.Update();
}
これでどうですかね?
次のようにすると、FooB::m_A は nullptr に初期化されます。
コード:
int main()
{
FooB *fbp = new FooB();
fbp->Update();
delete fbp;
}
new FooB はダメです。new FooB() です。
参考例
コード:
#include <iostream>
class FooA {
public:
bool Func() { return true; }
};
class FooB {
public:
FooA* m_A;
int a[2];
void Update() {
for (int i = 0 ; i < 5; i++) {
std::cout << "a[0]=" << a[0] << ", a[1]=" << a[1]
<< ", m_A=" << m_A << "\n";
if (m_A) {
if (m_A->Func()) break;
}
m_A = new FooA();
}
}
};
int main()
{
FooB fb;
fb.Update();
putchar('\n');
FooB *fbp1 = new FooB;
fbp1->Update();
putchar('\n');
FooB *fbp2 = new FooB();
fbp2->Update();
delete fbp1;
delete fbp2;
}
VC++ による実行結果
コード:
a[0]=957813, a[1]=998424, m_A=000E9D75
a[0]=1981952, a[1]=167772170, m_A=001E1E38
a[0]=0, a[1]=0, m_A=00000000
a[0]=0, a[1]=0, m_A=001E3E00
gcc による実行結果
コード:
a[0]=-13213, a[1]=0, m_A=0xffffccc0
a[0]=-2144448376, a[1]=1, m_A=0x1802e5088
a[0]=0, a[1]=0, m_A=0x0
a[0]=0, a[1]=0, m_A=0x600064290
new FooB() だと、m_A も a[0] も初期化されています。