cpp拷贝构造函数
来源:互联网 发布:提取背景音乐的软件 编辑:程序博客网 时间:2024/04/18 08:07
1.当类含有指针时,必须自定义拷贝构造函数。
坑点:
class DoubleTest { double *d; public: DoubleTest() :d(new double(123)) { cout << "constructor" << endl; } //DoubleTest(const DoubleTest& D) { // d = new double(*D.d); //} ~DoubleTest() { cout << "destruct" << endl; delete d; d = 0; } };
DoubleTest d1; DoubleTest d2(d1);
如果没有拷贝构造函数,d2(d1) 执行位拷贝。d2与d1的指针*d 指向同一个位置。析构函数会对同一个位置delete 两次,那不得鸟 会报错!
2.声明拷贝构造函数后,默认构造函数系统将不自动生成需要人工创建。另外当拷贝构造函数中 额外有默认值的参数,这时仍然作为拷贝构造函数被使用
class CopyConStr { public: CopyConStr() { cout << "constructor" << endl; } CopyConStr(CopyConStr&c, int x = 100) { cout << "CopyConStrunctor" << endl; } };
CopyConStr c; CopyConStr c1(c);
3.自动调用成员对象的拷贝构造函数
class CopyConStr { public: CopyConStr() { cout << "constructor" << endl; } CopyConStr(CopyConStr&c, int x = 100) { cout << "CopyConStrunctor" << endl; } }; class TestConstr { CopyConStr c; };
TestConstr tc; TestConstr tc1(tc);
4.拷贝构造初始化列表并非可选!!!!
class CopyConStr { int i; public: CopyConStr(int ii):i(ii) { cout << "constructor :"<<i << endl; } CopyConStr(CopyConStr&c, int x = 100) { this->i = c.i; cout << "CopyConStrunctor:"<< c.i<< endl; } }; class TestConstr { CopyConStr c; public: TestConstr():c(100){ } TestConstr(TestConstr& tc):c(tc.c){ } };
TestConstr(TestConstr& tc):c(tc.c) 这里 CopyConStr 没有默认构造函数,之前我一直以为初始化列表是可选的。可以在函数里面用等号赋值。可是在这里,如果不在初始化列表里面赋值 居然编译器会报错。
简直是666。这里的初始化列表保证了进入拷贝构造函数体之前,对类成员对象的初始化。
5.vs大流氓,居然对临时变量为const 。在函数调用临时变量必须为const ref这一条 居然 不遵守编译器也过去的。。。 真是。。。日
调用为:
useReturnVa(getReturnVa());
还好GCC 4.9还是遵循这个规则的。 vs里面应该是做了优化能够保存临时对象的地址与值。
ReturnValue *r = &(useReturnVa(getReturnVa()));
大写的服气……vs有毒………………
阅读全文
0 0
- Cpp--拷贝构造函数
- cpp拷贝构造函数
- Cpp--拷贝构造函数(深拷贝与浅拷贝)详解
- Cpp--拷贝构造函数与赋值运算符重载函数的区别与使用
- 构造函数、拷贝构造函数
- 拷贝构造函数,构造函数
- 拷贝构造函数--默认拷贝构造函数
- 构造、拷贝构造函数基础
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数(深拷贝,浅拷贝)
- 拷贝构造函数浅拷贝深拷贝
- 拷贝构造函数,浅拷贝,深拷贝
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数----深拷贝、浅拷贝
- 拷贝构造函数
- 拷贝构造函数
- 浅析拷贝构造函数
- 拷贝构造函数
- python基础 列表(2)
- 【代码积累-2】binary search
- USACO-Section1.3 crypt1[DFS]
- 应用系统负载分析与磁盘容量预测
- cookie常用方法
- cpp拷贝构造函数
- 【代码积累-3】bubble sort
- sax解析中事件处理器要注意的问题
- AndroidStudio下的JNI
- 关于cocoapods出错的注意事项
- Quick-Cocos2dx-3.X版本player黑屏不出welcome界面解决办法
- Eclipse Windows环境配置
- c++中类中成员在内存中的布局
- Spring学习之使用factorybean获取bean实例