摘要: 写copying函数(copy构造和copy赋值)时,复制所有local成员变量+调用base的适当coping函数。 如果发现copy构造和copy赋值有相同冗余的代码,消除冗余的方式是将这些代码放入private的一个成员函数中。 阅读全文
posted @ 2022-10-07 17:20 ijpq 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 出现问题的场景:例如a[i]=a[j]当i=j时,或者*pb=*pa当pa和pb指向同一个对象时。 考虑自我赋值问题,则需要将this和rhs进行判等,但带来巨大开销;考虑异常安全问题,可以先备份原本的成员变量,再令原本的成员变量指向新的副本,最后return *this(如果在做副本时(使用不带n 阅读全文
posted @ 2022-10-07 16:53 ijpq 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 写这段代码时: int x,y,z; x = y = z = 10; 实际上operator+返回的是左值引用,以保证x=y=z=10实际上是x=(y=(z=10)); 阅读全文
posted @ 2022-10-07 16:05 ijpq 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 在derived对象的base构造期间,对象类型是base,而不是derived。对象只有在derived构造之后才会成为derived 第1条的解决方法,是将构造、析构中的virtual改为non-virtual。然后把derived的信息传给base构造所调用的non-virtual (想想之前 阅读全文
posted @ 2022-10-07 16:00 ijpq 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 如果析构函数调用的函数会抛出异常,则析构函数可以捕获这个异常并且吞掉它,并且继续执行析构过程。 阅读全文
posted @ 2022-10-07 15:22 ijpq 阅读(13) 评论(0) 推荐(0) 编辑