条款07: 为多态基类声明 virtual 析构函数
Declare destructors virtual in polymorphic base classes
设计以下时间基类TimeKeeper:
class TimeKeeper {
public:
TimeKeeper();
~TimeKeeper();
};
class AtomicClock ...
分类:
编程语言 时间:
2015-08-27 18:47:03
阅读次数:
196
首先,为了在我们的程序中使用string类型,我们必须包含头文件。如下:#include//注意这里不是string.hstring.h是C字符串头文件1.声明一个C++字符串声明一个字符串变量很简单:stringStr;这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的...
分类:
编程语言 时间:
2015-08-27 18:24:52
阅读次数:
192
强调一下几个重点:
(1)new 操作符申请内存失败,是抛出异常,并不是返回NULL,若想申请失败返回NULL,需要加 (std::nothrow);
(2)使用std::nothrow 需要加头文件 #include
(3)使用assert
(4)构造函数有参数时最好加默认参数,这样就有默认构造函数了,且不要忘了定义为const
(5)赋值操作符函数体if语句中的条件必须是 this ...
分类:
其他好文 时间:
2015-08-27 11:09:44
阅读次数:
172
第2章 构造/析构/赋值运算
Constructors,Destructors,and Assignment Operator
几乎每一个 class 都会有一个或多个构造函数,一个析构函数,一个copy assignment 操作符.
条款05: 了解C++默默编写并调用哪些函数
Know what functions C++ silently writes an...
分类:
编程语言 时间:
2015-08-27 09:34:47
阅读次数:
146
析构函数:(来自百度百科)析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。C#中的析构函数定义...
Item 13: Use objects to manage resources.
熟悉智能指针的人肯定不会对此觉得陌生。利用C++中对象自动析构的特性,自动地释放资源。 C++编译器并未提供自动的垃圾回收机制,因此释放资源的责任落在了开发者的头上。 我们被要求总是成对地使用new和delete,例如:
Investment *pInv = createInvestment();
...
分类:
编程语言 时间:
2015-08-26 14:05:26
阅读次数:
234
1. 以reference-to-const传递参数的优点: 避免局部对象的构造和析构,节省时间和空间; 避免参数派生类对象向基类对象传递时的"对象切割",实现面向对象;2. reference虽然是"别名",但是底层实现往往是指针,因此对于内置类型,选用pass-by-value效率更高.这也.....
分类:
编程语言 时间:
2015-08-25 19:11:08
阅读次数:
136
Item 9: Never call virtual functions during construction or destruction.
父类构造期间,对虚函数的调用不会下降至子类。如果这并非你的意图,请不要这样做! 这个问题阿里实习面试曾经问到过,看这篇文章: 2014阿里巴巴面试经历
看Scott Meyers举的例子:
class Transaction { ...
分类:
编程语言 时间:
2015-08-25 16:35:29
阅读次数:
141
stl中所有容器都是存储在堆中,当stl中存储的是对象的时候,当容器离开作用域,会调用每个对象的析构。当容器中是指针的时候,离开作用域只会释放指针占用的内存,但是指针指向的内存区域不会释放。vector,earse并不会释放vector占用的内存释放vector占用的内存,最好使用swapvecto...
分类:
其他好文 时间:
2015-08-25 16:22:35
阅读次数:
132
一般是 在 XXX.obj中出现的 “AAA 已在 YYY.obj”中有了定义。
其实如果发现这些都是某个类中的,那么很有可能就是该类的声明和实现都是在同一个.h中了。
如以下这种情况。另一种方法是通用的,就是在 项目属性-链接器-命令行 中插入 “/FORCE:MULTIPLE”即可。这个选项告诉链接器去创建一个有效的exe文件或dll文件,即使一个函数或变量被引用,但多处定义。这种方法在...
分类:
其他好文 时间:
2015-08-21 23:25:55
阅读次数:
347