参照カウントを実装しようとしています。オブジェクトのすべてのコピーは、カウンタをインクリメントする必要があります。 私のコードの外観参照カウント付きコピーコンストラクタ
class Person{
public:
struct Kids{
Kids(){
count = 2;
boy = "Alex";
girl= " Lisa";
}
int count;
string boy;
string girl;
};
Person(string name , int age){
this -> name = name;
this -> age = age;
}
Person(const Person& a){
one = a.one;
one -> count++;
age = a.age;
name = a.name;
for(int i = 0; i < 5; i++){
family[i] = a.family[i];
}
};
void PrintIt(){
cout << one -> count << endl;
}
private:
Kids *one;
string name;
int age;
Kids family[5];
};
int main(){
Person one("Jogn",50);
//return 0;
Person two(one);
two.PrintIt();
}
そして、それはseg faultを投げます。私はポインタとして同じコンストラクタをコピーするオブジェクトを渡そうとしましたが、結果は同じです。ポインタを使ってオブジェクトを指すコピーコンストラクタを作成すると、参照カウントが可能になります。
キッズ*をどこにでも初期化していません。そのため、NULLポインタは 'one - > count ++'行でderefenceになります。あなたはおそらく名前で年齢のコンストラクタ 'one = new Kids();'が必要です。また、あなたの実装はちょっと複雑かもしれません。なぜstd :: shared_ptrを使ってそれを行うのですか? –
@AleksanderFular、正しいものであること、それは 'nullptr'ではない、どこでも指しているかもしれないが、とにかくUBだ。 – coredump