热文Effective C++ 读书笔记 Item20 传递常量引用比传值更好
C++继承了C默认传递方式为值传递的特性,那么对于一个值传递的函数,它的参数是被传进来变量的拷贝初始化的。拷贝是由拷贝构造函数生成的,而拷贝多是一个不经济的操作,至于为什...
C++继承了C默认传递方式为值传递的特性,那么对于一个值传递的函数,它的参数是被传进来变量的拷贝初始化的。拷贝是由拷贝构造函数生成的,而拷贝多是一个不经济的操作,至于为什...
在C++和其它面向对象的语言中,定义一个类就定义了一个新的类型。重载函数和操作符,内存的分配与释放,对象的构造与析构,全部掌握在你的手上。所以在设计类的时候,要像语言的设...
现在我们来到软件设计的话题中。软件设计就是让软件做你想做的事,软件设计一定需要接口(interface)设计,最后用C++实现。我们今天讨论可能是其中最重要的一条守则,把...
假设我们有如下函数: int priority(); //返回处理优先级 void processWidget(std::shared_ptr<Widget> pw, ...
看起来new与delete似乎是对应了,可是这样只会释放数组的第一个元素,其他99个对象则不会被释放,因为它们的析构函数没有被调用。 我们来看一下new和delete的工...
到现在我们一直在一个完美的世界里,资源管理类会帮你完成对资源的所有操作,自己不用关心资源管理类里面的原始资源。但现实是残酷的,有时我们依然需要直接接触资源管理类所封装的原...
如何使用auto_ptr和shared_ptr来管理基于堆(heap)的资源,但对于堆之外的资源,例如Mutex锁,智能指针就不再那么好用了,因此我们需要写自己的资源管理...
我们在学习编程时,经常能听到”资源”这个词。资源可能是一个很宽泛的概念,但总体来讲,资源是我们可以用来使用,并且使用完之后要返还给系统的东西。在C++中,资源多数是指动态...
C++有两种拷贝函数(copying function): 拷贝构造函数(copy constructor)和拷贝赋值操作符(copy assignment operat...
如果我们选择重载一个类的赋值运算符,要注意在自赋值时仍然能够正确工作。自赋值看起来像是不正确的调用方式, 但是在C++中这是合法的而且常常是不可识别的。例如:
C++的赋值操作符(assignment operator)有一个有趣的用法: int x, y, z; x = y = z = 15; ...
你在为某证券公司设计股市交易软件,需要有一个类用来表示股市交易: class Transaction{ ...
构造函数可以抛出异常。 C++标准指明析构函数不能、也不应该抛出异常。 在步入正题前,我们先来讲讲什么叫栈展开(stack unwinding),才能更好理解C++异常(...
位图是描述图像的最简单直观的一种方式,把图像横向分为等间距的W列,纵向分为等间距的H列,于是这个图像大小被定义为分辨率W*H。位图分为单色图和彩色图,区分方法是图片的一个...
画刷其实是一个像素大小为8*8的位图,用多个相同的位图对封闭图形的内部进行填充。 MFC的CBrush类封装了画刷对象,创建画刷时,首先定义一个画刷对象,然后调用Crea...
图形设备接口(Graphics Device Interface,GDI),把应用程序的函数调用传递给图形设备驱动程序,由设备驱动程序来执行与硬件相关的函数。GDI向应用...
使用AppWizard创建SDI和MDI的过程相似,主要区别是创建SDI时不生成CChildFrame类,CMainFrame类的基类为CMainWnd;而在创建MDI时...
文档和视图结构的优势就在于数据的管理与显示分离,数据总是要以一定的结构来存储,而视图负责数据的呈现。数据往往有多种呈现方式,例如一份报表,可以用表格的形式呈现,也可以用图...
MFC中提供了丰富的视类供开发者使用,下面对各个类进行介绍: 1) CView类是最基本的视类只支持最基本的操作。 2) CScrollView类提供了滚动的功能,你可以...
在程序运行时CWinApp将创建一个CFrameWnd框架窗口实例,而框架窗口将创建文档模板,然后有文档模板创建文档实例和视实例,并将两者关联。一般来讲我们只需对文档和视...
视类窗口是指程序运行后,显示信息的那一部分。对应的类是CXXXView(XXX表示项目名称)类,CXXXView类是派生于CView类,而CView类又派生于CWnd类。...
以下是我在最初学习VC时所常用的开发思路和方法,希望能对初学VC的朋友有所帮助和启发。 开发需要读写文件的应用程序并且有简单的输入和输出可以利用单文档视结构。 开发注重交...
MFC字符串操作类CString CString是用来表示可变长度的字符串的类。在MFC中,这个类的使用频率非常高。CString是MFC经过封装后特有的一种字符串类型,...
主要有4个部分组成: 1) 资源文件Resource.h:主要是定义资源的ID。 2) 预编译文件:可以用来解决头文件包含冲突的问题,定义一些需要全局性包含的文件。 3)...
从程序设计转化为软件设计,这是激动人心的时刻。这里面对的不再是黑色的、单调的控制台界面,而是一个崭新的环境。各种功能强大,界面漂亮的软件,将从你的手上诞生。软件开发的第一...
Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序。这些程序是Windows操作系统提供给应用程序编程的接口(Application Pro...
Boost是一个C++开发者的社区,作为C++标准的试验场, 收容了很多高质量、开源的、跨平台、独立于编译器的C++库, 包括许多TR1组件的实现。
C++这个名字是在1983年由Rick Mascitti提出的,C++的曾用名还有”new C”, “C with Classes”。 1998年ISO/IEC 1488...
许多程序员习惯性地忽略编译器警告。他们认为,毕竟,如果问题很严重,编译器应该给一个错误信息而非警告信息,不是吗?这种想法对其他语言或许相对无害,但在 C++,我敢打赌编译...
placement new 是带有额外参数的 operator new,但是通常都指“接受一个指针指向对象该被构造之处”的operator new。这个版本被纳入了 C+...
Item 50介绍了如何自定义new和delete但没有解释你必须遵循的惯例, 这些惯例中有些并不直观,所以你需要记住它们! operator new需要无限循环地获取资...
我们在Item 49中介绍了如何自定义new的错误处理函数,以及如何为你的类重载operator new。 现在我们回到更基础的问题,为什么我们需要自定义operator...
new申请内存失败时会抛出"bad alloc"异常,此前会调用一个由std::set_new_handler()指定的错误处理函数(”new-handler”)。 se...