How to forbid the use of the default constructor i

2020-06-30 05:04发布

I don't want to make it possible in my program to create an object without passing arguments to the constructor.

Is there a way?

6条回答
再贱就再见
2楼-- · 2020-06-30 05:35

The reason why you can create an object without passing arguments to the constructor is that you have a default constructor. A default constructor is a kind of constructor which doesn't have a parameter or all parameters having default values. And if you didn't declare any constructor, the compiler will make one for you. So, the solution is very easy. You can declare a constructor with a parameter without default value, then the compiler won't bother to make the constructor to you.

查看更多
淡お忘
3楼-- · 2020-06-30 05:39

When you declare any other constructor, the compiler will not generate the default constructor for you. If you have specified a default no-argument constructor, you can make it private.

Remember that the compiler can automatically generate each of these 4 member functions for a class.

  • default no argument constructor
  • default destructor
  • copy constructor
  • assignment operator

But it will not generate a default one if you have declared one yourself, i.e., if you declared a constructor yourself, it will not create the default constructor. If you didn't declare any of the other 3 though, the compiler can generate them.

edit: Note that this information applies to C++03, but it is different in C++11 as Matthieu M. mentions in the comments. C++11 also allows for the constructor to be explicitly forbidden. See Offirmo's answer.

查看更多
太酷不给撩
4楼-- · 2020-06-30 05:41

While the other answers are true, there is a new technique in C++11 for expressing that : deleted default constructor

It allows forbidding a function without depending on any other trick. It also clearly express your intention in the code.

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;
}
查看更多
再贱就再见
5楼-- · 2020-06-30 05:41

Create a private default constructor.

查看更多
姐就是有狂的资本
6楼-- · 2020-06-30 05:44

Define a constructor taking the correct argument(s). This will prevent the compiler from defining a default constructor.

class X { 
public:
   X(int) {}
};

int main(){ 
    X x; // will not compile;
    X y(1); // will compile.
    return 0;
}
查看更多
仙女界的扛把子
7楼-- · 2020-06-30 05:44

creating a non empty constructor "cancels" the empty default constructor, so if you don't explicitly also create an empty constructor, no objects will be created without giving arguments.

查看更多
登录 后发表回答