クラス A に何らかのデータを含め、クラス B にそのデータへのポインタを含めたいと考えています。データ オブジェクト A への参照を返す関数を介してデータへのアクセスを提供しています。オブジェクト B を作成すると、オブジェクト A にアクセスできますが、B へのポインターを作成すると、同等の操作でセグメンテーション エラーが発生します。このような:
#include <iostream>
#include <vector>
class A {
public:
A(const int pInt) {mInt = pInt;}
void print() {std::cout << mInt << std::endl;}
private:
int mInt; //some data
};
class B {
public:
B() {mP1 = new A(1);} //initialise to 1
~B() {delete mP1;}
A& access() {return *mP1;} //return reference to the data
private:
A* mP1; //pointer to some data
};
int main() {
B vB;
vB.access().print(); //this works.
B *vBptr;
vBptr->access().print(); //Segmentation fault!
std::vector<B*> vVec;
vVec.resize(1);
vVec[0]->access().print(); //Segmentation fault!
}
B *vBptr を作成するときに、B オブジェクトが初期化されていないと思いますか? では、自動的に初期化される B オブジェクトへのポインタのベクトルを作成するにはどうすればよいでしょうか?
乾杯。