ポインターが NULL に設定されている場合、そのポインターへの参照も、それを介した参照も NULL になりません。実行しようとすると爆発するコンパイル可能な例を次に示します。
#include <string>
#include <iostream>
#define NULL 0
class Seedcoat {
public:
//Seedcoat();
std::string Name;
int Weight;
};
class Seed {
public:
//Seed();
std::string Name;
int Weight;
Seedcoat* ItsSeedcoat;
};
class Apple {
public:
//Apple();
std::string Name;
int Weight;
Seed* ItsSeed;
};
int main()
{
///////Apple Objects Begin///////
Apple MyApple;
Seed MySeed;
Seedcoat MySeedCoat;
MyApple.ItsSeed = &MySeed;
MyApple.ItsSeed->ItsSeedcoat = &MySeedCoat;
MyApple.ItsSeed->ItsSeedcoat->Weight = 2;
if ( MyApple.ItsSeed != NULL) {
std::cout << "The weight of the apple seed's seedcoat is " << MyApple.ItsSeed->ItsSeedcoat->Weight <<".\n";
}
MyApple.ItsSeed = NULL;
if ( MyApple.ItsSeed->ItsSeedcoat != NULL) {
std::cout << "The weight of the apple seed's seedcoat is " << MyApple.ItsSeed->ItsSeedcoat->Weight <<".\n";
}
return 0;
}
だから私の質問は:なぜこれは
MyApple.ItsSeed->ItsSeedcoat != NULL
true を返します。ItsSeed が NULL に設定されているため、そうではないと思いますが、ItsSeedcoat の重み値を参照しようとしますが、ItsSeed が存在しないため爆撃します。これを回避する簡単な方法があることに気づきました。この例は、私が観察している動作を示すためのものです。これは何か心配することはありますか?- または、これは正常な動作ですか? このようにした理由は何ですか?ありがとう。