MoreEffectiveC++笔记.md

指针与引用:
一般在以下情况使用指针,一是存在不指向任何对象的可能(可以设置指针为空)
二是不要能够在不同的时刻指向不同的对象(通过改变指针的指向)

当重载操作符时,应该使用引用。

没有默认构造函数的类(只定义了有参数的构造函数的情况),无法建立对象数组。
但可以使用指针建立对象指针数组,要记得及时释放指针指向的内存。

C++提供了关键字 explicit, 可以解决单参数的构造函数的隐式类型转换问题。即,在构造函数声明前加explicit参数,可以防止构造函数在隐式类型转换中使用。

Array(int size); // 单参构造函数, 更安全的写法 explicit Array(int size);

Array a[10];
Array b[10];
if( a == b[i] ){ // 潜在的隐患,隐式类型转换 a == static_cast< Array >(b[i])

}

++i比i++的效率要高,因为后缀操作会创建一个临时对象作为返回值。这与操作符的重载函数执行方式有关。

// 前缀形式:增加然后取回值
UPInt& UPInt::operator++()
{
this += 1; // 增加
return
this; // 取回值
}

// postfix form: fetch and increment
const UPInt UPInt::operator++(int)
{
UPInt oldValue = this; // 取回值
++(
this); // 增加
return oldValue; // 返回被取回的值
}

构造函数防止资源泄漏
包含指针成员变量的类的构造函数执行时有可能出现异常,导致部分已new出的内存泄漏。对象本身未初始化成功,不会调用析构函数。
手动处理释放的过程繁琐,且不能保证完全正确地释放内存。
良好的解决方法是将成员指针改为auto_ptr对象。这样,任何正确构造的对象最终都能被auto_pet对象的析构函数成功释放。且不必手工在自定义的析构函数中释放资源。

必须防止异常信息被传递到析构函数外,析构函数抛出异常易导致程序不正常退出(崩溃)

c++规范要求被作为异常抛出的对象必须被复制,因为当local对象离开了其生存范围后,其析构函数将被调用。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com

文章标题: MoreEffectiveC++笔记.md

文章字数: 576

本文作者: Jun

发布时间: 2021-06-27, 17:33:30

最后更新: 2021-06-27, 21:01:52

原始链接: http://yoursite.com/2021/06/27/MoreEffectiveC++笔记/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏