Effective c++
文章平均质量分 74
vector6_
linux c++/java
展开
-
Effective C++ 实现之(使用新式转型,尽量少做转型动作)
Effective C++ 实现之(尽量少做转型动作) C语言风格的旧式转型动作有两种形式: (T)expression //将expression转型为T T(expression) //将expression转型为T C++提供了四种新式转型: const_cast<T>(expression) dynamic_cast<T>(expression) reinterpret_cast<T>(expression) static_ca原创 2021-04-06 22:03:22 · 121 阅读 · 2 评论 -
Effective C++设计声明之(宁以non-member、non-friend替换member函数)
Effective C++设计声明之(宁以non-member、non-friend替换member函数) 问题聚焦: member函数的封装一定比 non-member、non-friend好吗?并不是 导致较大封装性的可能是non-member non-friend函数,因为它并不增加“能够访问class内之private成分”的函数数量。 假设有个class用来表示网页浏览器。这样的class可能提供的众多函数中,有一些用来清除下载元素高速缓存区、清除访问过的URLs的历史记录、以及移除系统中的所原创 2021-04-06 00:12:41 · 108 阅读 · 0 评论 -
Effective C++设计声明之 若所有参数皆需类型转换,请为此采用non-member函数
Effective C++设计声明之(若所有参数皆需类型转换,请为此采用non-member函数) 问题聚焦: member函数和 non-member 对于隐式类型转换的支持的区别? 通常来说,另classes支持隐式类型转换是个糟糕的注意,当然这条规则有例外是建立数值类型时。 假设有一个Rational 类 class Rational { public: Rational(int numerator = 0, int denominator = 1); int numerator() cons原创 2021-04-06 00:11:33 · 124 阅读 · 0 评论 -
Effective C++资源管理之(以独立语句将newed对象置入智能指针)
Effective C++资源管理之(以独立语句将newed对象置入智能指针) 问题聚焦: 使用了资源管理对象(如智能指针),就一定是安全的吗?显然不是。 资源泄露发生可能在于,在“资源被创建”和“资源被转换为资源管理对象”两个时间点之间有可能发生异常干扰。 解决方案:最好以独立语句的形式将对象置入智能指针(智能指针初始化) 假设我们有个根据Widget进行优先权处理的函数: int priority(); void processWidget(shared_ptr<Widget> pw,原创 2021-04-06 00:09:57 · 87 阅读 · 0 评论 -
Effective C++资源管理之(在资源管理类中提供对原始资源的访问)
Effective C++资源管理之(在资源管理类中提供对原始资源的访问) 在资源管理类中提供对原始资源的访问 在前面的文章中我们使用到了C++提供的智能指针以及自己封装的资源管理类,这些类中我们将资源封装在class内部。但是在很多情况下我们需要直接使用到这些资源,所以需要提供一些方法直接使用到这些内部资源,例如shared_ptr的get函数等 示例: 创建一个类 class Investment {}; 创建一个函数,会返回一个Investment指针对象 Investment* createInv原创 2021-04-06 00:07:42 · 99 阅读 · 0 评论 -
Effective C++资源管理之(在资源管理类中小心拷贝行为)
Effective C++资源管理之(在资源管理类中小心拷贝行为) 在前面的文章中我们介绍了智能指针类来管理资源,但是对于某些资源,它们不是动态分配的(不是堆上的),因此智能指针就是不适合这种资源的管理了,因此你可能会设计自己的资源管理类 一、“不希望拷贝”演示案例 假设我们使用C的API函数处理类型为Mutex的互斥器对象,其中有两个函数如下: void lock(Mutex* pm); //锁定pm所指的互斥器 void unlock(Mutex* pm); //将互斥器解锁 现在我们设计一个类,原创 2021-04-06 00:06:48 · 65 阅读 · 0 评论 -
Effective C++ 资源管理之(以对象管理资源)
Effective C++ 资源管理之(以对象管理资源) 一、资源释放失败的案例 例如我们使用一个用来塑模投资行为(例如股票,债券等等)的程序库,其中各式各样的投资类型继承于一个基类 Investment : class Investment {}; 现在建立通过一个工厂函数供应我们获得某特定的 Investment 对象: //返回一个Investment继承体系中的动态分配对象 Investment* createInvestment(); 如果我们在某作用域内调用这个函数返回的对象,那么使用完这个原创 2021-04-06 00:05:58 · 511 阅读 · 0 评论