在不重写 copy-ctors 定义的情况下这可能吗?
在 C++11 中,是的。您只需声明构造函数并将其标记为默认值:
struct X
{
// ...
private:
X(X const&) = default;
};
这将定义一个复制构造函数,该构造函数与隐式生成的定义相同,但将是private
. 例如:
struct X
{
X() { } // Required because a user-declared constructor in
// the definition of X inhibits the implicit generation
// of a default constructor (even if the definition is
// defaulted!)
void foo()
{
// ...
X tmp = *this; // OK!
// ...
}
private:
X(X const&) = default; // Default definition, accessible to
// member functions of X only!
};
int main()
{
X x;
// X x2 = x; // ERROR if uncommented!
}
这是一个活生生的例子。
请注意,类定义中用户声明的构造函数(包括复制构造函数)会禁止默认构造函数的隐式生成,即使它的定义是默认的。这就是为什么,例如,我必须X
在上面的示例中显式声明 的默认构造函数。