wkl*_*wkl 23
声明任何其他构造函数时,编译器不会为您生成默认构造函数.如果已指定默认的无参构造函数,则可以将其设为私有.
请记住,编译器可以为类自动生成这4个成员函数中的每一个.
但是如果你自己声明了一个默认值,它就不会生成默认值,也就是说,如果你自己声明了一个构造函数,它就不会创建默认的构造函数.如果你没有声明任何其他3,但编译器可以生成它们.
编辑:请注意,此信息适用于C++ 03,但在C++ 11中它与Matthieu M.在评论中提到的不同.C++ 11还允许明确禁止构造函数.见Offirmo的回答.
Off*_*rmo 22
虽然其他答案都是正确的,但在C++ 11中有一种新技术用于表达:删除默认构造函数
它允许禁止功能而不依赖于任何其他技巧.它还清楚地表达了您在代码中的意图.
class X
{
public:
X(int) {}
X() = delete; // will never be generated
};
int main()
{
X x; // will not compile;
X y(1); // will compile.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用正确的参数定义构造函数.这将阻止编译器定义默认构造函数.
class X {
public:
X(int) {}
};
int main(){
X x; // will not compile;
X y(1); // will compile.
return 0;
}
Run Code Online (Sandbox Code Playgroud)