摘要:
1.在某些特殊的情况下,赋值运算符必须先释放一些旧值,然后才能根据新值的类型分配新的数据。此时,自复制会出错2.operator关键字配合要转换的类型,构成了转换运算符的重载函数。该函数没有返回值,但可以在函数中返回一个转换后的值例1:待举例。3.两个很重要的例子例2:class A{public: A(){cout<<"construct "<<this<<endl;} A(const A& a){cout<<"copy "<<this<<endl;} ~A(){cout& 阅读全文
摘要:
1.delete运算符只能删除堆中的空间,删除栈中的空间会导致出错例1:int main(){ A a; A *p = new A; A *q = &a; delete p;//正确,因为p指向堆中的未命名空间 delete q;//错误,因为q指向栈中的空间 return 0;}2.关于强制类型转换例2:class A{ int x;public: A(int i):x(i){cout<<"construct "<<this<<endl;} A(const A& a){x = a.x;cout<<" 阅读全文
摘要:
例1:class A{ int x;public: A(int i):x(i){} int get(){return x;}};A& func(){ A a(23); return a;}int main(){ A &r = func(); cout<<r.get()<<endl; return 0;}输出:1245000解释:r被初始化为返回值的别名。由于是按引用返回,返回值就是a的别名。因此,r就是a的别名。a是一个局部变量,func()结束后,a消失了。r成了一个空的引用。因此,输出的是上个随机值。例2:class A{ int x;public: 阅读全文