我声明了一个类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
?