おはようございます。共有プロジェクトで C++ のオブジェクトを使用した深いコピーと浅いコピーの背後にあるロジックを理解するのに問題があるため、次の例を作成しました。
int main() {
ObjectAType* objecta = ObjectAType::New();
ObjectBType* objectb = ObjectBType::New();
// some operation to populate data members of object a
objecta->Operation();
// assume I have accessors to return datamembers of object a
// I wish to make a deep copy of SOME of those data members into object b
objectb->AlignWithA(objecta);
objecta->Delete();
objectb->Delete();
return 0;
}
次に、オブジェクト b クラス関数を次のように指定します。
public:
void ObjectBType::AlignWithA(ObjectAType* objecta) {
this->ObjectBDataMember = objecta->DataAccessor();
}
protected:
int ObjectBDataMember;
データ アクセサーは、クラス定義内で次のようなものです。
public:
int ObjectAType::DataAccessor() {
return this->ObjectADataMember;
}
protected:
int ObjectADataMember;
結果としていくつかの質問があります。
1) オブジェクト b では、データ メンバーが次のように宣言されているため、
int ObjectBDataMember;
としてではなく
int *ObjectBDataMember;
なぜデータメンバーは次のようにアクセスされるのですか
this->ObjectBDataMember
としてではなく
this.ObjectBDataMember
?
2) これは深いコピーですか、それとも浅いコピーですか?
重要な部分が抜けていたら申し訳ありません。私はあまりプログラマーではないので、このようなことには簡単に混乱してしまいます。文学は私をさらに混乱させました。お時間をいただきありがとうございます。