コピーコンストラクターと代入演算子を実装して、クラスに対してこれらを再定義するときにわずかな変更だけが必要になるようにする方法があるかどうか疑問に思っています。
たとえば、クラスを次のように考えます。
class Foo {
private:
int* mInt_ptr;
/* many other member variables
of different types that aren't
pointers */
public:
Foo();
Foo(const Foo&);
Foo& operator=(const Foo&);
~Foo();
};
ここで、ポインターmInt_ptr
を処理するには、コピーコンストラクターと代入演算子で適切に処理する必要があります。ただし、残りのメンバー変数は、の浅いコピーを実行しても安全です。これを自動的に行う方法はありますか?
クラスが大きくなると、非ポインターメンバー変数をコピーする操作を明示的に書き出すのは面倒で扱いにくくなる可能性があるため、たとえば、次のようなコピーコンストラクターを作成する方法があるかどうか疑問に思います。
Foo::Foo(const Foo& tocopy)
{
mInt_ptr = new int(*tocopy.mInt_ptr);
/* Do shallow copy here somehow? */
}
明示的な形式ではなく:
Foo::Foo(const Foo& tocopy)
{
mInt_ptr = new int(*tocopy.mInt_ptr);
mVar1 = tocopy.mVar1;
mVar2 = tocopy.mVar2;
...
...
mVarN = tocopy.mVarN;
}