社区
C++ 语言
帖子详情
问个狂野的问题
zzunicholas
2006-12-13 10:48:49
把句柄放在类里可以保护和关联信息
为了防止构造,我们在参数中使用对象的引用
但是
在返回一个对象的时候,还要调用构造函数,这是一定了
但是一般构造函数都是创建句柄,然后拷贝句柄
可是作为返回的对象,其句柄就要释放何必重建和拷贝
直接把它给返回的对象关联不就行了,避免释放和重建的过程
但是,对象可不可以知道自己是用做返回的呢?
...全文
283
7
打赏
收藏
问个狂野的问题
把句柄放在类里可以保护和关联信息 为了防止构造,我们在参数中使用对象的引用 但是 在返回一个对象的时候,还要调用构造函数,这是一定了 但是一般构造函数都是创建句柄,然后拷贝句柄 可是作为返回的对象,其句柄就要释放何必重建和拷贝 直接把它给返回的对象关联不就行了,避免释放和重建的过程 但是,对象可不可以知道自己是用做返回的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zzunicholas
2006-12-16
打赏
举报
回复
我只好加了个公有成员
QQ_370566617
2006-12-13
打赏
举报
回复
开玩笑,
怎么区分:
obj2 = obj1;//要副本
和
obj2 = returnobj();//不要不用副本
引用计数只能保证所有权统一
副本怎么吧?
taodm
2006-12-13
打赏
举报
回复
汗,你要能写成CMatrix<T>::CMatrix(CMatrix<T> m)而编译通过就算你狠。
你的程序其实是一个所有权转移、传递问题。
可以参看C++的auto_ptr的设计。
用 CMatrix<T>::CMatrix(CMatrix<T> & m)
CMatrix<T> & CMatrix<T>::operator =(CMatrix<T> & m)
在函数内部修改m的状态,让它知道自己已经被剥夺了所有权,以取消在析构函数里的动作。
QQ_370566617
2006-12-13
打赏
举报
回复
嗯,
这个对象自己很难知道,
因为表面上是返回对象然后退出函数
如果你setp into一下,
你会发现是先返回进行构造然后返回对象析构自己
但是楼上的楼上说的引用计数这个...
返回对象还没析构
zzunicholas
2006-12-13
打赏
举报
回复
我来解释一下
template<typename T>
CMatrix<T>::CMatrix(const CMatrix<T> & m)//采用引用作参数通常可以避免生成临时的对象也就是我说的避免了构造和析构
:_pCS(m._pCS),m_bReturn(false)//copy constructor
{
m_nHeight=m.m_nHeight;
m_nWidth=m.m_nWidth;
m_pData=new T[m_nHeight*m_nWidth];
memcpy(m_pData,m.m_pData,m_nHeight*m_nWidth*sizeof(T));
//通过对象构造是这样的创建内存,拷贝过来
}
重载=和我上面的拷贝复制问题一样
template<typename T>
CMatrix<T> & CMatrix<T>::operator =(CMatrix<T> & m)
{
if(&m==this) return *this;
m_nHeight=m.m_nHeight;
m_nWidth=m.m_nWidth;
if(m_pData)
{
delete [] m_pData;
m_pData = NULL;
}
m_pData=new T[m_nHeight*m_nWidth];
memcpy(m_pData,m.m_pData,m_nHeight*m_nWidth*sizeof(T));
return *this;
}
我要说的是如果对象知道是返回的
那么m_pData = m.m_pData;
当然返回的对象在析构的时候不能释放内存,要跳过去才行
前提是对象要知道自己将被返回
Wolf0403
2006-12-13
打赏
举报
回复
ref-counting...
taodm
2006-12-13
打赏
举报
回复
“为了防止构造,我们在参数中使用对象的引用”不知所云。请代码示例。
“但是一般构造函数都是创建句柄,然后拷贝句柄”,还是不知道你想说啥,请代码示例。
对象没法知道自己正在用做函数返回值,但是有办法知道自己携带的信息是不是被别人处理过。
治理变得
狂野
:优步技术公司的史诗般的不当行为-研究论文
我们详细讨论了这些
问题
并问: • 优步早期的冒险行为是否会在未来造成更大的
问题
? • CEO 的个性和行为在影响组织的集体行为方面有多重要? • 文化一旦建立,要改变它有多难? • 文化在多大程度上自上而下创建...
Boost-System:所需模块; discord.js和discord-logs
我有一个
问题
要问你吗?
狂野
#8888(228971558972948491)您可以访问我的Discord帐户,如果无法访问,请询问 ,他们将为您提供指导。 我发现了一个错误? 与我联系,我会尽快解决。 怀着对Serendia家族的热爱,...
Anubirb:神奇宝贝剑与盾的PKM转储
常问
问题
您是如何获得这些文件的?这些都是使用CFW直接从游戏中转储的。这些文件的合法性如何?出于数据分析的目的,所有这些都是从未修改的股票游戏中转储的未修改文件,但以下情况除外:闪亮的Zacian目录使用ROM...
博学谷
狂野
架构师
对目前业务现状有反思,思考可能遇到的
问题
和解决方案) 二、java基础 三、多线程,并发编程 四、JVM 五、分布式 六、mysql 七、其他。maven git java 基础 一、集合类 Collections分为List、Set、Map ArrayList...
希尔伯特第 13
问题
,Kolmogorov–Arnold representation theorem 和通用近似定理(Universal approximation theorem)
关于这个方程,希尔伯特问它的解xxx,作为三个变量aaabbb和ccc的函数,是否可以表示为有限数量的二元函数的组合。
C++ 语言
64,662
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章