对构造函数、拷贝构造函数和赋值操作符调用的简单回顾
2012-11-25 15:01
399 查看
本文只是测试构造函数、拷贝构造函数和赋值操作符的调用问题,不涉及这些函数内的具体实现,所以多包涵 还有如果觉得有不足之处还望指出,谢谢………… Cpp代码 #include<iostream> using namespace std; class Object{ char* name; public: Object() { cout << "Objected is constructed.(无参数)" << endl; } Object(char* s) // { name = s;// cout << "Objected is constructed.(参数)" << endl; } Object( const Object& o) { //为对象申请内存并进行出错检查;(本文没有处理) //从对象o复制到本对象 name = o.name; cout << "Object is copied." << endl; } char* getName() { return name; } Object & operator = (const Object& lala) { name = lala.name; cout << "Object is operator =." << endl; return *this; } ~Object() { cout << "Object is destructed." << endl; } }; Object getObject( Object o) { cout << "getO" << endl;// return o; } Object getObject1( Object& o) { cout << "getO1" << endl;// return o; } Object& getObject2( Object& o) { cout << "getO2" << endl;// return o; } int main() { Object o("zhangsan"); Object o1; o1 = getObject( o); cout << endl; cout << "Object o2 = getObject(o):" << endl; Object o2 = getObject(o);//相当于Object o2(getObject(o)); cout << endl; cout << "o1 = getObject(o):" << endl; o1 = getObject(o); cout << endl << endl; //getObject1 cout << "getObject1:" << endl; Object o11; o11 = getObject1( o); cout << endl; cout << "Object o22 = getObject(o):" << endl; Object o22 = getObject1(o); cout << endl; cout << "o11 = getObject(o):" << endl; o11 = getObject(o); cout << endl << endl; //getObject2 cout << "getObject2:" << endl; Object o111; o111 = getObject2( o); cout << endl; cout << "Object o222 = getObject(o):" << endl; Object o222 = getObject2(o); cout << endl; cout << "o111 = getObject(o):" << endl; o111 = getObject(o); cout << "end" << endl; return 0; } Objected is constructed.(参数) Objected is constructed.(无参数) Object is copied. //每次传参都会构建临时对象 getO Object is copied. Object is destructed. Object is operator =. Object is destructed. Object o2 = getObject(o): Object is copied. getO Object is copied. Object is destructed. o1 = getObject(o): Object is copied. getO Object is copied. Object is destructed. Object is operator =. Object is destructed. getObject1: Objected is constructed.(无参数) getO1 Object is copied. Object is operator =. Object is destructed. Object o22 = getObject(o): getO1 Object is copied. o11 = getObject(o): Object is copied. getO Object is copied. Object is destructed. Object is operator =. Object is destructed. getObject2: Objected is constructed.(无参数) getO2 Object is operator =. Object o222 = getObject(o): getO2 Object is copied. o111 = getObject(o): Object is copied. getO Object is copied. Object is destructed. Object is operator =. Object is destructed. end 拷贝构造函数和赋值操作符: 同样是利用现有对象的值,生成/更新另一个对象的值。 区别在于:拷贝构造函数是去完成对未初始化的存储区的初始化,而赋值操作符则是处理一个已经存在的对象。对一个对象赋值,当它一次出现时,它将调用拷贝构造函数,以后每次出现,都调用赋值操作符。 定义对象a,并用另一个对象b对a进行初始化时, 若没有拷贝构造函数时,那么编译器会自动生成一个 T b(1);//假设对象b已经初始化 T a(b);//初始化阶段,调用拷贝构造函数 T c = b;//虽然使用了“=”,但是初始化阶段,仍调用拷贝构造函数 c = a; //因为对象c已经定义,所以此处调用赋值操作符重载函数。如果没有编译器会自动生成一个。
相关文章推荐
- 对构造函数、拷贝构造函数和赋值操作符调用的简单回顾
- 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
- 构造函数,拷贝构造函数,赋值操作符的调用时机
- 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
- 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
- 构造函数,拷贝构造函数,赋值构造函数的调用机制
- C++面试题,自己实现String类的构造函数,拷贝构造函数,赋值操作符,append,replace,+运算符重载等
- 编写合适的构造函数、拷贝构造函数、赋值操作符、析构函数(后三者一般同时出现,称为“大三元法则”),那么这个概念就完整并且不用再考虑其资源(内存)管理的问题。
- 拷贝构造函数 赋值构造函数 自动转型构造函数的调用
- c++ 默认构造函数,构造函数,复制构造函数,赋值操作符,析构函数调用示例
- 构造函数、复制构造函数和赋值操作符的调用
- 构造函数、拷贝构造函数、赋值操作符、析构函数、debug与release
- 十、构造函数和析构函数(四) 拷贝构造函数、默认拷贝构造函数、拷贝构造函数调用几种情况、深拷贝浅拷贝、构造函数和=操作符区别、禁止对象拷贝
- 拷贝构造函数和赋值构造函数调用次序
- 构造函数,拷贝构造函数,以及赋值操作调用的具体使用
- C++ 拷贝构造函数和重载赋值操作符相互调用分析 [转]
- 拷贝构造函数中是否可以调用重载后的赋值运算操作符
- 构造函数、拷贝构造函数、赋值操作符
- C++类中的4个特殊函数 - 缺省构造函数、拷贝构造函数、拷贝赋值操作符和析构函数
- C++类中的4个特殊函数 - 缺省构造函数、拷贝构造函数、拷贝赋值操作符和析构函数