社区
C++ 语言
帖子详情
私有化构造函数
haow85
2010-09-09 03:31:24
在什么情况下会通过私有化构造函数来使得一个 class 不能被 instantiate?
...全文
278
17
打赏
收藏
私有化构造函数
在什么情况下会通过私有化构造函数来使得一个 class 不能被 instantiate?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wjjll123
2010-09-10
打赏
举报
回复
单例模式嘛。就是这样的哇
youlanting
2010-09-10
打赏
举报
回复
[Quote=引用 10 楼 haow85 的回复:]
引用 7 楼 just_one_two 的回复:
把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用
我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美国政府官员的程序,因为美国总统只有一个,所以如果定义了美国总统这个类的时候,限制它只能有一个对象比较好。
如果私有化函数的话,那么只能……
[/Quote]
个人觉得,
通过static方法调用类的私有构造函数 实现对象的创建,可以创建不止一个对象,创建的数量可以另设static数据成员控制,达到限定数目,析构除之。
static方法中创建的对象不一定是全局的。你在static方法中创建了对象并返回该对象,该对象是否全局与你自己的设置的作用域生存期有关,与普通变量没什么区别。
youlanting
2010-09-10
打赏
举报
回复
单件模式 尝试限定实例化的对象的数量 不希望用户实例化该类的对象
十八道胡同
2010-09-10
打赏
举报
回复
单例模式 需要这么做
haow85
2010-09-10
打赏
举报
回复
[Quote=引用 7 楼 just_one_two 的回复:]
把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用
[/Quote]
我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美国政府官员的程序,因为美国总统只有一个,所以如果定义了美国总统这个类的时候,限制它只能有一个对象比较好。
如果私有化函数的话,那么只能通过类中的 static 函数来访问类的成员。这样的话一方面只有唯一一个数据,也就是定义在这个类中的数据,另一个方面这个唯一的数据是可以全局访问的。
我这么说对不对?
haow85
2010-09-10
打赏
举报
回复
[Quote=引用 16 楼 youlanting 的回复:]
引用 15 楼 haow85 的回复:
引用 13 楼 youlanting 的回复:
引用 10 楼 haow85 的回复:
引用 7 楼 just_one_two 的回复:
把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用
我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美……
[/Quote]
可以有全聚德静态变量,别的文件访问不到。或者局部得分静态便亮。一个类里面可一定以一个 public 的景泰便亮,这样就可以蜷局防蚊了。
youlanting
2010-09-10
打赏
举报
回复
[Quote=引用 15 楼 haow85 的回复:]
引用 13 楼 youlanting 的回复:
引用 10 楼 haow85 的回复:
引用 7 楼 just_one_two 的回复:
把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用
我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美国政府官员的程序,因为美国总统只有一个,所以……
[/Quote]
一般static生命期处于整个程序运行期间,但是可见性不一定
haow85
2010-09-10
打赏
举报
回复
[Quote=引用 13 楼 youlanting 的回复:]
引用 10 楼 haow85 的回复:
引用 7 楼 just_one_two 的回复:
把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用
我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美国政府官员的程序,因为美国总统只有一个,所以如果定义了美国总统这个类的时候,限制它只能有一个对象……
[/Quote]
我是说设定 static 的方法之后,在程序的全局都可以通过调用 static 的方法来防问类内的成员。
xurongzhu
2010-09-09
打赏
举报
回复
单例模式的情况下。
@井九
2010-09-09
打赏
举报
回复
知道构造可以私有就行,没有需求就不用。
just_one_two
2010-09-09
打赏
举报
回复
把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用
生活简单到无聊
2010-09-09
打赏
举报
回复
防止隐式转化吧。。
高性能架构探索
2010-09-09
打赏
举报
回复
设计模式中的 单件模式
Baesky
2010-09-09
打赏
举报
回复
[Quote=引用楼主 haow85 的回复:]
在什么情况下会通过私有化构造函数来使得一个 class 不能被 instantiate?
[/Quote]
用抽象类如何?
pengzhixi
2010-09-09
打赏
举报
回复
[Quote=引用楼主 haow85 的回复:]
在什么情况下会通过私有化构造函数来使得一个 class 不能被 instantiate?
[/Quote]
你可以看看单件模式。
珍惜生命远离CPP
2010-09-09
打赏
举报
回复
私有也可以被友元访问到..
ccltiancai
2010-09-09
打赏
举报
回复
控制class的实例化数量,如单件
在Spring的Bean注入中,即使你
私有化
构造函数
,默认他还是会去调用你的私有
构造函数
去实例化...
在Spring的Bean注入中,即使你
私有化
构造函数
,默认他还是会去调用你的私有
构造函数
去实例化。 如果我们想保证实例的单一性,就要在定义<bean>时加上factory-method=””的属性,并且在私有
构造函数
中添加防御机制。单例的getInstance()可能会添加一些逻辑,而Spring的默认调用
构造函数
去创建,就不能保证这份逻辑的准确性,所以会带...
私有
构造函数
,防止实例化
这种设计通常用于那些只包含静态方法和静态字段的类,即所谓的工具类(Utility Class)或帮助类(Helper Class)。由于这些类不需要维护任何实例状态,也不应该被实例化,因此将它们的
构造函数
私有化
是一个很好的做法。在这个场景下,类的内部实现细节(即实例状态)是不需要的,因此将其隐藏起来(通过
私有化
构造函数
)是合理的。其他开发者在阅读代码时,看到私有
构造函数
就会明白这个类是为了提供静态方法或静态字段而设计的,而不是为了被实例化的。关键字来创建这个类的实例,编译器也会报错,从而防止了误用。
C++【1】-
构造函数
私有化
作用
在c++编程的单例模式分两种:饿汉式和懒汉式,步骤如下:那么
构造函数
私有化
还有其他作用吗?不能从这个类派生或者创建类的实例 很多情况下要求当前的程序中只有一个object。例如只有一个鼠标的object.通常我们都是把的声明置于区段中,假如我们将其放入区段中会发生什么后果呢? 当我们在程序中声明一个对象时,要调用
构造函数
,而这个调用往往是外部的,也就是它不属于class对象本身的调用,而
构造函数
是私有的,由于在类的外部不允许访问私有成员,所以这会报错。 然而,对于类本身,可以利用它的公有成员.因为他们独立于
构造函数
私有化
(单例模式Singleton)
构造函数
私有化
(单例模式Singleton) 一般来说,
构造函数
都是放在公有区,要是把
构造函数
放在私有区在外部都构造不了对象了。在一种特殊情况下,会把
构造函数
放在私有区,不允许被外界创建对象,我们只需要一个对象即可。 class A{ public: static A& getInstance(); setup(){...} private: A(); A(const A& rhs); ... }; A& A::getInstance(){ ststic A a; r
Dart利用私有
构造函数
_()创建单例模式
构造函数
的名称通常与类名相同,这是 Dart 中的一种约定。但如果你愿意,你可以为
构造函数
取一个不同的名字,只要没有指定返回类型,它仍然是
构造函数
。在Dart中,如果你定义一个没有显示
构造函数
的类,Dart会为你生成一个默认的无参
构造函数
。然而,当你定义了任何
构造函数
时(无论是否有参数),Dart将不再提供默认
构造函数
。在你的代码中,DatabaseHelper._();是一个私有的
构造函数
,它没有参数,因此它是一个无参
构造函数
。当你创建一个类的实例时,Dart会调用这个
构造函数
。// 单例模式。
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章