C++ 我是否可以将复制构造函数设为私有,并且仍然使用默认实现
我认为这是不可能的,但我不妨问问。 我可以声明一个私有副本构造函数并且仍然使用默认实现吗 背景:我有一个向量很大的类,除了一个成员函数外,我不想调用复制构造函数。使用标准的公共副本可能会 很容易导致错误,例如在迭代中忘记引用(C++ 我是否可以将复制构造函数设为私有,并且仍然使用默认实现,c++,copy-constructor,C++,Copy Constructor,我认为这是不可能的,但我不妨问问。 我可以声明一个私有副本构造函数并且仍然使用默认实现吗 背景:我有一个向量很大的类,除了一个成员函数外,我不想调用复制构造函数。使用标准的公共副本可能会 很容易导致错误,例如在迭代中忘记引用(foreach(Type el,vectobigobjects),而不是foreach(Type const&el,vectobigobjects))。因此,我想保留标准副本构造函数,但只是将其私有化 在不重写复制系数定义的情况下,这是否可行 在不重写复制系数定义的情况下,
foreach(Type el,vectobigobjects
),而不是foreach(Type const&el,vectobigobjects)
)。因此,我想保留标准副本构造函数,但只是将其私有化
在不重写复制系数定义的情况下,这是否可行
在不重写复制系数定义的情况下,这是否可行
在C++11中,是的。您只需声明构造函数并将其标记为默认值:
这将定义一个副本构造函数,该构造函数的定义与隐式生成的构造函数的定义相同,但将是私有的
。例如:
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
的默认构造函数
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!
}