您的位置:首页 > 编程语言 > C语言/C++

C++ 拷贝构造(二)

2017-07-27 21:55 225 查看
如果在代码中没有提供拷贝构造函数,那么C++会自动建立一个拷贝构造函数。这个默认的拷贝构造函数,不是字节对字节的拷贝,而是成员对成员的拷贝。做成员变量对成员变量的拷贝。

在 A类中,如果成员变量是
int
,则拷贝给
int
,如果是
float
,则拷给
float
,如果是另一个类B b 的成员,则会用B 的拷贝构造去拷贝构造b,如果B类给出的是默认的拷贝构造(系统给的),那么拷贝构造就会递归下去。

同时,C++中对于拷贝构造的优化,当两个拷贝构造在连续时系统会优化为一次拷贝构造。

简单的讲就是:一次拷贝构造之后把构造的对象没有放置,而是直接用做下一个拷贝构造的参数,则这两次的拷贝构造被优化为一次,但得注意:优化时,前一个必须是形参或者临时创建的对象。

比如

A copy_func(char *name){
A a(name);
a.print();
return a;//拷贝构造被调用
}


优化为:

A nocopy_func(char *name){
return A(name);//拷贝构造不会被调用


其实在return的时候,会在栈中生成一个临时变量,其实就相当于:

A f(){
A a;
return a;
}

int main()
{
A t=f();
A @temp = f();
A t= @temp;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: