copy-ctor
クラスのとを宣言しoperator=
private
て、そのオブジェクトをコピー不可にし、両方の定義を提供しません。クラスがこれらのオブジェクトをfriends
呼び出すと、エラーが発生しますよね?copying behavior
link-time
class A
{
public:
...
private:
A(const &a);
A& operator=(const &a); //just declarations, no definitions
};
しかし、エラーを から に移動するためにlink-time
、compile-time
私は本からこれを行うことができることを学びました:
class UnCopyable
{
public:
...
private:
Uncopyable(const &u);
Uncopyable& operator=(const &u); //also no definitions
};
次にA
継承させUncopyable
、
class A: private Uncopyable
{
...
};
そして、誰かが でコピーを呼び出した場合、A
最初に のコピー相手をA
呼び出す必要がありますが、とはプライベートであるため、これは失敗し、 で発生するエラーが発生します。Uncopyable
Uncopyable
copy-ctor
operator=
compile-time
私の質問は、なぜそれが起こるのcompile-time
ですか?