これはコピー コンストラクターであり、const 参照(「オブジェクト」ではない) を引数として取ります。
クラス定義は示していませんが、
*arg.impl_
逆参照arg
impl_
を意味するのではなく、次のいずれかのように見えると呼ばれるメンバーを探します。
(*arg).impl_
arg->impl_
代わりに、ポインターを逆参照するarg.impl_
ことを意味します。
*(arg.impl_)
これは、型が何であれ、同等のコピー コンストラクターを呼び出していimpl_
ます。
サンプル:
struct Impl {
int i_;
Impl() : i_(0) {}
Impl(const Impl& other) : i_(other.i_) {}
};
struct Foo {
Impl *impl_;
// Foo::Foo calls Impl::Impl
Foo() : impl_(new Impl()) {}
// Foo::Foo(const Foo&) calls Impl::Impl(const Impl&)
Foo(const Foo& other) : impl_(new Impl(*other.impl_)) {}
};
注意。これは、pimpl (または Pointer to Implementation) のイディオムのように見えます。