随笔 - 32  文章 - 1 评论 - 0 阅读 - 13471
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

首先,如下写法:

Class A = B;


Class A;
A = B;

并不等价,前者等价于A(B),后者等价于A.operator=(B)

  问题源于我想要用类似如下写法完成复制拷贝函数

Class(Class &t) {
    *this = t;
}

  尝试重载operator=,由于写挂了,或者说是return错误的对象,导致死循环或者编译不通过

1.死循环:

  关键在于对复制拷贝函数的理解(什么时候会调用),如果函数的形参不是引用,或者return一个非引用的对象,

就会调用复制拷贝函数,而我的复制拷贝函数又会调用operator=,这样陷入死循环

2.编译不通过

  operator= return的对象,应当是引用,避免调用复制拷贝函数,而这个引用应该是引用对象本身*this,而非传入的const引用

 

写得也挺乱的,主要是几小时前的问题了,还是要具体的问题具体分析,但是限于本人比较懒,所以列出参考.

 

1.Class A = B;是个什么意思:http://stackoverflow.com/questions/2462773/c-copy-construct-construct-and-assign-question

2.拷贝构造函数详解:http://blog.csdn.net/lwbeyond/article/details/6202256

3.一个例子加强理解: http://bbs.csdn.net/topics/40006610

posted on   Gemmeg  阅读(179)  评论(0编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
点击右上角即可分享
微信分享提示