我一直读到私有(private)构造函数阻止对象创建。 我在单例模式中使用过它们,我知道如何在使用私有(private)构造函数(使用静态方法等)时创建对象。 我知道构造函数用于对象的初始化。
但我不明白是什么让私有(private)构造函数阻止对象创建。 如果我的对象没有初始化怎么办。我的意思是它应该扔一些垃圾,但为什么要限制??
我已经检查了 stackoverflow 中的所有现有答案,但我没有得到确切的概念。
最佳答案
要在 C++ 中创建对象,需要调用构造函数。如果需要调用的构造函数不可访问,则无法调用,也无法创建对象。
private
构造函数的意义不是阻止 对象构造。它是关于控制哪些代码可以访问构造函数,从而限制哪些代码可以创建作为该类实例的对象。类的所有成员函数(static
或其他)以及类的所有声明的friend
都可以访问private
构造函数(其中可能是单独的函数,或其他类)- 因此其中任何一个都可以使用 private
构造函数(假设已定义构造函数)创建该类的实例。
如果无法调用构造函数,则无法初始化对象。毕竟,构造函数的工作是初始化对象。但是如果构造函数是不可访问的,那么就不能构造对象,所以不可能有未初始化的对象。
当然,没有什么可以阻止该类拥有多个具有不同访问控制(private
、protected
和public
)的构造函数。可以通过任何代码使用该构造函数构造具有public
构造函数的类
。但是任何尝试使用 private
构造函数(由非成员非friend
)仍将被拒绝。因此,访问控制允许类
的(开发人员)对实例的构造方式进行某种程度的控制。
不定义(即不实现)构造函数确实会阻止对象的构造。如果该构造函数是 private
,编译器将拒绝调用它的尝试(除非尝试创建实例的函数是成员或 friend
,如上所述)。对于类的成员和 friend ,编译器将允许访问构造函数,但是(在典型的先编译后链接工具链中)链接器不会构建可执行文件,因为它无法解析对未定义函数的调用.使用将构造函数标记为 private
而不是定义它的技术是阻止代码构造类实例的常用方法(通过阻止代码编译或阻止代码运行)。
关于c++ - 为什么私有(private)构造函数阻止对象创建 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41361223/