至于这两种函数的用途,用于引用计数时比较有用吧,完成一些在堆上分配的数据的传递工作。
http://xinklabi.iteye.com/blog/653457
啥也不说了,直接上代码;注释很详细了
#include <iostream>
using namespace std;
class Class{
public:
Class(){
}
//如果用 explicit Class(const Class& c){ 来声明,则不能用Class c1=c;而只可以Class c2(c);
Class(const Class& c){
cout<<"copy construnctor called\n";
}
//=的调用者本身就是个Class类!该函数只是为了自行完成一些数据传递的任务,最后返回该调用者的引用即可
Class& operator=(const Class& c){
cout<<"= operator called\n";
return *this;
}
//函数返回时调用拷贝构造函数
static Class getClass(){
cout<<"begin getClass\n";
Class c;
cout<<"end of getClass,soon to return\n";
return c;
}
};
//类作为参数,进入函数时会调用拷贝构造函数
void classAsParam(Class c){
cout<<"begin classAsParam\n";
}
//类的引用作为参数,进入函数时不会调用拷贝构造函数
void classReferenceAsParam(Class& c){
cout<<"begin classReferenceAsParam\n";
}
void main(){
Class c;
Class c1=c;//因为是初始化,调用的是拷贝构造函数,而非=运算符
Class c2(c);//同上
cout<<"\n//////////// Test getClass without return value\n";
Class::getClass();//函数返回时调用拷贝构造函数
cout<<"\n//////////// Test getClass with new left value\n";
Class c3=Class::getClass();//函数返回时调用拷贝构造函数;由于c3在此声明,因而再调用拷贝构造函数(貌似被编译器省略了)
cout<<"\n//////////// Test getClass with exist left value\n";
c2=Class::getClass();//函数返回时调用拷贝构造函数;由于c2已经声明过,因而再调用=运算符将临时变量赋值给c2
cout<<"\n//////////// Test classAsParam\n";
classAsParam(c);//类作为参数,进入函数时会调用拷贝构造函数
cout<<"\n//////////// Test classReferenceAsParam\n";
classReferenceAsParam(c);//类的引用作为参数,进入函数时不会调用拷贝构造函数
}
分享到:
相关推荐
拷贝构造函数和赋值运算符的调用时机也是我们需要注意的。拷贝构造函数会在创建新对象时被调用,例如: ```cpp CExample obj1; // 普通构造 CExample obj2 = obj1; // 拷贝构造 CExample obj3(obj1); // 同样是拷贝...
1. **调用时机**:拷贝构造函数在对象创建时调用,赋值运算符在对象创建后、生命期内的某个时刻调用。 2. **作用对象**:拷贝构造函数创建新对象,赋值运算符修改已有对象。 3. **资源管理**:两者都涉及资源的复制...
1. 调用时机:拷贝构造函数在对象创建时调用,而赋值运算符在对象已经存在后调用。 2. 对象状态:拷贝构造函数创建的是全新对象,原始对象不受影响;赋值运算符影响的是已有对象,可能导致原始对象状态改变。 3. ...
1. 调用时机:拷贝构造函数在对象创建时调用,赋值运算符在对象已经存在后调用。 2. 参数类型:拷贝构造函数接收一个常量引用,赋值运算符通常接收一个非常量引用。 3. 对象状态:拷贝构造函数创建全新的对象,赋值...
1. 调用时机:拷贝构造函数在创建新对象时调用,赋值运算符在已有对象之间进行赋值操作时调用。 2. 参数类型:拷贝构造函数的参数是常量引用,赋值运算符通常接受一个同类型对象作为参数。 3. 对象状态:拷贝构造...
### C++拷贝构造函数与赋值操作详解 在C++编程中,拷贝构造函数与赋值操作是实现类的拷贝管理的关键机制。它们主要用于处理类的对象之间的拷贝和复制过程,尤其是在处理含有动态分配内存的类时尤为重要。 #### ...
- 调用时机:当创建新对象时,如果该对象的初始化需要一个同类型对象作为参数,则会调用拷贝构造函数。 - 示例:`String c(a);` 2. **赋值函数(赋值运算符重载)**: - 定义:赋值函数允许现有对象接收另一个...
本次小测验的主题是C++构造函数的相关知识点,包括构造函数的种类、调用时机以及构造函数的实现方式等。 首先,我们看到给定的代码片段中出现了Student类和Sprite类的定义,这两个类都是C++中类的典型示例。Student...
选项A、B、C都会触发拷贝构造函数,而选项D是对象赋值操作,会调用赋值运算符而不是拷贝构造函数。 5. 常对象指针:`const A * p;`声明了一个指向类A对象的指针,但指针所指的对象是常量,即不能通过p修改对象的...
8. **拷贝构造函数的调用时机**:拷贝构造函数在创建新对象并使用现有对象初始化时、函数参数传递和函数返回值时被调用。 9. **构造函数的特点**:构造函数与类名相同,无返回类型,主要用于初始化对象成员。 10. ...
8. **拷贝构造函数的调用时机**:拷贝构造函数在对象初始化、函数参数传递和函数返回值时会被调用。 9. **构造函数的特点**:构造函数用于初始化新创建的对象,其名称与类名相同,不返回任何值。构造函数的主要任务...
#### 复制构造函数的调用时机 **问题**: 复制构造函数在哪些情况下会被调用? **解答**: 复制构造函数在以下几种情况下会被调用: 1. 当函数返回对象的值时。 2. 当对象作为值传递给函数参数时。 3. 当基于现有对象...
赋值运算符和拷贝构造函数虽然都是用来复制对象,但它们之间的不同在于,拷贝构造函数用于创建一个新的对象,而赋值运算符则是将一个对象的值赋给另一个已经存在的对象。析构函数则是在对象生命周期结束时被调用,...
21. 赋值运算符与拷贝构造函数:两者都涉及对象复制,但拷贝构造函数用于创建新对象,而赋值运算符作用于已存在的对象。 22. 析构函数调用:对象生命周期结束时,如局部对象离开作用域或动态分配的对象被删除时。 ...
8. **拷贝构造函数的调用时机**:对象初始化、函数参数传递和函数返回值等场景会触发拷贝构造函数。 9. **构造函数**:构造函数与普通函数的主要区别在于其名称与类名相同,无返回类型,主要用于初始化对象。 10. ...
三、复制构造函数及其调用时机 复制构造函数是一种特殊的构造函数,用于创建一个新的对象,并用一个已存在的同类型对象初始化它。其形参通常是对本类对象的引用。复制构造函数在以下情况下会被调用:一是用一个对象...
- 区别:拷贝构造函数涉及创建新对象的过程,而赋值运算符则是在已存在的对象之间进行赋值。 **22. 析构函数的调用时机** 析构函数会在对象的生命周期结束时被自动调用,例如当对象离开作用域或者显式删除动态分配...
赋值运算符和拷贝构造函数虽然都是用于对象之间的复制,但它们之间存在明显的区别: - **赋值运算符**用于已存在的对象之间进行赋值操作。 - **拷贝构造函数**用于创建新对象时,以现有对象作为参数。 #### 二十二...
8. **拷贝构造函数的调用时机**:拷贝构造函数在创建新对象并使用已有对象初始化时、函数参数传递和函数返回值时被调用。 9. **构造函数**:构造函数用于初始化对象,名称与类名相同,没有返回类型。构造函数的主要...
21. **赋值运算符和拷贝构造函数**:两者都可以实现对象间的数据复制,但拷贝构造函数用于新对象的创建,赋值运算符作用于已存在的对象。 22. **析构函数的调用**:对象生命周期结束,例如离开其作用域或删除动态...