クラス内にポインターがある場合、Copy コンストラクターを指定する必要があることを最近発見しました。
それを知るために、次の簡単なコードを作成しました。コンパイルはできますが、コピー コンストラクターの実行時に実行時エラーが発生します。
コピーしたオブジェクトのポインタから値だけをコピーしようとしていますが、同じアドレスを割り当てることは避けています。
それで、ここで何が問題なのですか?
class TRY{
public:
TRY();
~TRY();
TRY(TRY const &);
int *pointer;
void setPointer(int);
};
void TRY::setPointer(int a){
*pointer = a;
return;
}
TRY::TRY(){}
TRY::~TRY(){}
TRY::TRY(TRY const & copyTRY){
int a = *copyTRY.pointer;
*pointer = a;
}
int main(){
TRY a;
a.setPointer(5);
TRY b = a;
b.setPointer(8);
cout << "Address of object a = " << &a << endl;
cout << "Address of object b = " << &b << endl;
cout << "Address of a.pointer = " << a.pointer << endl;
cout << "Address of b.pointer = " << b.pointer << endl;
cout << "Value in a.pointer = " << *a.pointer << endl;
cout << "Value in b.pointer = " << *b.pointer << endl;
return 0;
}
この概念は、オブジェクトから他のオブジェクトにすべての値をコピーする必要がある、多くのポインターを持つ他のクラスに使用します。このコードには最初にコピーが必要なので、コピーの可能性を維持したいと思います (コピー コンストラクターを非公開として非表示にすることはしません)。
さらに、実装する必要がある実際のクラスには 10 個ほどのポインターがあり、時間の経過とともに変化する可能性があります。C++ でディープ コピー コンストラクターを使用する、もう少しスマートな方法はありませんか?...