社区
C++ 语言
帖子详情
求详细解释一下类的构造函数的一个问题
zhouliang0806
2012-03-26 05:33:33
“当类中的构造函数被定义为私有控制访问时,就不能使用new操作符来定义一个对象了”,怎么来解释这句话。
...全文
151
16
打赏
收藏
求详细解释一下类的构造函数的一个问题
“当类中的构造函数被定义为私有控制访问时,就不能使用new操作符来定义一个对象了”,怎么来解释这句话。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kythfly_lyht
2012-03-27
打赏
举报
回复
singleton模式
xiarui
2012-03-27
打赏
举报
回复
[Quote=引用 10 楼 wangato 的回复:]
引用 6 楼 xiarui 的回复:
引用 5 楼 zhouliang0806 的回复:
引用 1 楼 pengzhixi 的回复:
new不是两个功能吗,1.分配内存,2.调用构造函数构造对象。
那么如果不用new操作符来定义一个对象,而是直接定义,比如A a,这样,会有问题吗?
没有问题
但是同样只能够在 可以访问私有函数 的函数 里面来生成类的实例。
比较……
[/Quote]
是一定可以,而不是“可能”了:)
pathuang68
2012-03-26
打赏
举报
回复
[Quote=引用 3 楼 bofrobber 的回复:]
引用楼主 zhouliang0806 的回复:
“当类中的构造函数被定义为私有控制访问时,就不能使用new操作符来定义一个对象了”,怎么来解释这句话。
个人感觉这句话不太严谨。
将构造函数设置为私有,实例的创建就只能在能够访问类私有函数的对象、类了。比如类对象,或者友元类对象了。
[/Quote]
++
这句话的确不够严谨。
比如Singleton模式,就是要求构造函数是private的,在其内部的静态成员函数中是可以用new来创建对象的。严谨一点的说法应该是:
“当类中的构造函数被定义为私有控制访问时,就不能使用new操作符
在类的外部
来定义一个对象了”
这里类的外部不包括形如:
void AClass::some_member_function()
{
// ...
AClass *a = new AClass;
// ...
}
这样的情况。
还有一点需要说明,如果一个类所有的构造函数都是private的话,那么这个类也不能作为基类被继承,因为构造派生类对象是需要调用基类的构造函数的。
深圳大哥
2012-03-26
打赏
举报
回复
#include <iostream>
using namespace std;
class A
{
public:
A(){}
private:
A(int val){i=val;}
int i;
};
int main()
{
A *a=new A();
return 0;
}
编译通过
深圳大哥
2012-03-26
打赏
举报
回复
#include <iostream>
using namespace std;
class A
{
public:
A(){}
private:
A(int val){i=val;}
int i;
};
int main()
{
A a;
return 0;
}
编译成功
深圳大哥
2012-03-26
打赏
举报
回复
#include <iostream>
using namespace std;
class A
{
A(){}
private:
A(int val){i=val;}
int i;
};
int main()
{
A a;
return 0;
}
运行结果:
error C2248: 'A::A' : cannot access private member declared in class 'A'
谈笑禅生
2012-03-26
打赏
举报
回复
[Quote=引用 6 楼 xiarui 的回复:]
引用 5 楼 zhouliang0806 的回复:
引用 1 楼 pengzhixi 的回复:
new不是两个功能吗,1.分配内存,2.调用构造函数构造对象。
那么如果不用new操作符来定义一个对象,而是直接定义,比如A a,这样,会有问题吗?
没有问题
但是同样只能够在 可以访问私有函数 的函数 里面来生成类的实例。
比较绕口,希望我能说明白。。。:)
[/Quote]
嗯,不能直接用私有的构造函数创建对象,如有一个成员函数(友函数?),可以访问私有函数,则可能行。
谈笑禅生
2012-03-26
打赏
举报
回复
定义了一个类pcf,
其构造函数声明为Private的,创建对象时报错:
错误 1 error C2248: “pcf::pcf”: 无法访问 private 成员(在“pcf”类中声明)
zhouliang0806
2012-03-26
打赏
举报
回复
[Quote=引用 7 楼 elegant87 的回复:]
引用 5 楼 zhouliang0806 的回复:
引用 1 楼 pengzhixi 的回复:
new不是两个功能吗,1.分配内存,2.调用构造函数构造对象。
那么如果不用new操作符来定义一个对象,而是直接定义,比如A a,这样,会有问题吗?
A a的时候调用默认的构造函数。如果默认构造函数不是私有的,就可以的
[/Quote]
你好,你的这种理解我有一个问题,在《effective C++》中有这么一个条款,如果不想编译器自动生成函数,就断然拒绝,就是采用private来声明成员函数,如果这样的话,将构造函数声明为私有函数时,那么就不会调用编译器自动生成的函数了。
elegant87
2012-03-26
打赏
举报
回复
[Quote=引用 5 楼 zhouliang0806 的回复:]
引用 1 楼 pengzhixi 的回复:
new不是两个功能吗,1.分配内存,2.调用构造函数构造对象。
那么如果不用new操作符来定义一个对象,而是直接定义,比如A a,这样,会有问题吗?
[/Quote]
A a的时候调用默认的构造函数。如果默认构造函数不是私有的,就可以的
xiarui
2012-03-26
打赏
举报
回复
[Quote=引用 5 楼 zhouliang0806 的回复:]
引用 1 楼 pengzhixi 的回复:
new不是两个功能吗,1.分配内存,2.调用构造函数构造对象。
那么如果不用new操作符来定义一个对象,而是直接定义,比如A a,这样,会有问题吗?
[/Quote]
没有问题
但是同样只能够在 可以访问私有函数 的函数 里面来生成类的实例。
比较绕口,希望我能说明白。。。:)
zhouliang0806
2012-03-26
打赏
举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
new不是两个功能吗,1.分配内存,2.调用构造函数构造对象。
[/Quote]
那么如果不用new操作符来定义一个对象,而是直接定义,比如A a,这样,会有问题吗?
从头来过
2012-03-26
打赏
举报
回复
+1[Quote=引用 1 楼 pengzhixi 的回复:]
new不是两个功能吗,1.分配内存,2.调用构造函数构造对象。
[/Quote]
bofrobber
2012-03-26
打赏
举报
回复
[Quote=引用楼主 zhouliang0806 的回复:]
“当类中的构造函数被定义为私有控制访问时,就不能使用new操作符来定义一个对象了”,怎么来解释这句话。
[/Quote]
个人感觉这句话不太严谨。
将构造函数设置为私有,实例的创建就只能在能够访问类私有函数的对象、类了。比如类对象,或者友元类对象了。
恨天低
2012-03-26
打赏
举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
new不是两个功能吗,1.分配内存,2.调用构造函数构造对象。
[/Quote]
++
pengzhixi
2012-03-26
打赏
举报
回复
new不是两个功能吗,1.分配内存,2.调用构造函数构造对象。
【测绘摄影测量】空间前方交会数据
【测绘摄影测量】空间前方交会数据
1123bevdet-op-optimize.onnx
1123bevdet-op-optimize.onnx
ContextCapture倾斜摄影空三建模最快方案2018
源码下载地址: https://pan.quark.cn/s/40677b766bda "ContextCapture 倾斜摄影快速、创新及全面空三建模与单机集群硬件部署方案2018" 此资源聚焦于倾斜摄影(ContextCapture)空三建模及单机集群硬件部署方案,致力于为用户呈现最快、最优成本效益的台式工作站、移动工作站、并行集群的多样化部署选择。以下是该资源的
详细
知识点概述: 一、相关设备型号说明 * UltraLAB 是西安坤隆计算机科技有限公司推出的专属图形工作站品牌,具备三大卓越优势:顶尖的计算硬件架构、精准的行业应用定制服务、专业的硬件系统优化工艺。 二、硬件部署方案 * 台式工作站部署建议:设备特色在于当前市场上最快的台式计算架构,适用于办公场景下,部门层级常规的倾斜摄影空三处理、三维建模。 * 便携式工作站部署建议:设备特色在于当前市场上最快的移动计算架构,适用于移动倾斜摄影的空三处理、三维建模工作站。 * 大数据量处理工作站推荐:设备特色在于极限自动超频加速与16个并行存储构造,具备空三处理和三维建模最强的计算性能及海量高速并行存储性能。 * 多设备并行计算集群部署建议:针对海量图像数据计算产生的巨大需
求
,单机计算能力处理时间过长,效率不高,通过多台机器并行集群,进行空三处理、三维建模,显著减少处理时间。 三、部署方案深入解析 * 2.1 倾斜摄影建模(台式工作站)部署方案:设备特色在于最高的计算处理能力~6核5.2GHz,内存最大配置可达64GB,配备最新图灵架构的RTX显卡,相比市场其他品牌机器(单CPU、双Xeon处理器)更快、更具成本效益。 * 2.2 倾斜摄影建模(移动便携式工作站)硬件部署方案:设备特色在于最高的计算处理能力~6...
2026大童保险好赔时光(理赔案例合集)
2026大童保险好赔时光(理赔案例合集)
实用代码脚本易语言源码SQL到文本
实用代码脚本易语言源码SQL到文本
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章