Effective C++
nawuyao
这个作者很懒,什么都没留下…
展开
-
C++之对象切割
#include #include using namespace std;class Base{ public: virtual void fun() { cout << "Base fun() is Called" << endl; }};转载 2015-12-29 22:52:28 · 456 阅读 · 0 评论 -
C++智能指针简单剖析
导读最近在补看《C++ Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑。C++面试过程中,很多面试官都喜欢问智能指针相关的问题,比如你知道哪些智能指针?shared_ptr的设计原理是什么?如果让你自己设计一个智能指针,你如何完成?等等……。而且在看开源的C++项目时,也能随处看到智能指针的影子。这说明智能指针不仅是面试官爱问的题材,转载 2016-10-03 21:16:19 · 323 阅读 · 0 评论 -
构造函数、析构函数抛出异常的问题
出处:http://www.cnblogs.com/fly1988happy/archive/2012/04/11/2442765.html1. 抛出异常1.1 抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常。该语句的格式为: throw 表达式;如果在try语句块的程序段中(包括在其中调用的转载 2016-09-11 18:21:40 · 266 阅读 · 0 评论 -
Effective C++(条款1-4)
1、对于单纯常量,最好以const对象或enums替换#define2、对于形似函数的宏,最好改用inline函数替代#define3、成员函数如果是const 意味着什么?有两个流行的概念:bitwise constness(又称physical constness)和logical constness。bitwise constness阵营的人相信,成员函数只有在不更改原创 2015-12-22 16:49:06 · 501 阅读 · 0 评论 -
Effective C++(条款5-12)
1、编译器可以为类暗自创建默认构造函数、复制构造函数、赋值运算符重载函数以及析构函数,所有这些函数都是public且inline。当这些函数被需要(被调用)而用户没有定义这些函数时,它们才被编译器创建出来,编译器创建的析构函数是non-virtual的。但是,如果你打算在一个含有引用成员和const成员的类中支持赋值操作,你就必须自己定义一个赋值运算符重载函数。2、原创 2015-12-24 14:32:30 · 341 阅读 · 0 评论 -
Effective C++(条款13-17)
1、以对象管理资源把资源放进对象内,我们就可以依赖C++的“析构函数自动调用机制”确保资源被释放。关键点在于:获得资源后立即放进管理对象;管理对象运用析构函数确保资源被释放。2、在资源管理类中小心copying行为实际上“以对象管理资源”的观念常被称为“资源取得实际便是初始化时机”(Resource Acquisition Is Initialization;RAI原创 2015-12-28 17:19:50 · 369 阅读 · 0 评论 -
Effective C++(条款18-25)
1、让接口容易被正确使用,不容易被误用你应该在你所有的接口中努力达成这些性质。“促进正确使用”的办法包括接口一致性,以及与内置类型的行为兼容。“阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。tr1::shared_ptr支持定制型删除器(custom_deleter),这可以防范DLL问题。如下:std::tr1::shared_pt原创 2015-12-29 15:52:49 · 290 阅读 · 0 评论 -
Effective C++(条款26-31)
一、尽可能延后变量定义式的出现时间std::string encryptPassword(const std::string& password){ ... //可能抛出异常的部分,比如长度的检查 std::string encrypted(password); //通过复制构造函数原创 2016-01-10 13:02:37 · 731 阅读 · 0 评论 -
Effective C++(条款32-34)
一、确定你的public继承塑模出is-a关系public 继承意味着is-a。适用于基类身上的每一件事情也适用于继承类身上,因为每一个继承类对象也是一个基类对象。继承类比基类表现出更加特殊化的概念,基类则比继承类更加一般化。思考:正方形与矩形之间的关系是is-a的关系吗?考虑这段代码:class Rectangle{public: virtual voi原创 2016-01-11 09:54:10 · 368 阅读 · 0 评论 -
Effective C++(条款35-38)
一、考虑virtual函数以外的其他选择原创 2016-01-13 21:16:56 · 446 阅读 · 0 评论 -
Effective C++(条款39-40)
一、明智而审慎的使用private继承原创 2016-01-15 18:06:24 · 352 阅读 · 0 评论 -
Effective C++(条款41-44)
一、了解隐式接口和编译期多态class和template都支持接口和多态。1、对于class而言,接口是显式的(explicit),以函数签名(由函数名称、参数类型、返回类型构成)为中心。多态则是通过virtual函数发生于运行期。举个例子:class Widget{public: Widget(); virtual ~Widget(); vi原创 2016-01-16 15:11:58 · 335 阅读 · 0 评论 -
Effective C++(条款51-55)
条款51:编写new和delete时需固守常规原创 2016-01-27 18:35:12 · 477 阅读 · 0 评论 -
Effective C++(条款48-50)
条款48:认识template元编程Template metaprogramming(TMP,模板元编程)是编写template_based C++程序并执行于编译期的过程。所谓的TMP,就是以C++写成,执行于C++编译器内的程序。一旦TMP程序结束执行,其输出,也就是从template具现出来的若干C++源码,便会一如往常地被编译。TMP可将工作由运行期移往编译期,因而得以实现原创 2016-01-26 10:48:16 · 308 阅读 · 0 评论 -
Effective C++(条款45-47)
一、运用成员函数模板接受所有兼容类型原创 2016-01-25 15:59:30 · 363 阅读 · 0 评论 -
为什么const对象只能调用const成员函数,而不能调用非const成员函数?
参考:http://www.cnblogs.com/cplinux/articles/5553716.html在c++中,我们可以用const来定义一个const对象,const对象是不可以调用类中的非const成员函数,这是为什么呢?下面是我总结的一些原理。假设有一个类,名字为test代码如下: 1 class test{2 int i;3 pub转载 2016-10-07 11:49:26 · 5191 阅读 · 1 评论