(一)
先看下面的代码:
string* stringArray = new std::string[100];
...
delete stringArray;
这样的做法是错误的,因为stringArray所含的100个string对象中的99个可能并没有被适当地删除,因为它们的析构函数很可能没有被调用。
(二)
使用new时发生的事情:
(1)内存被分配出来;
(2)针...
分类:
编程语言 时间:
2014-06-19 10:31:16
阅读次数:
224
(一)
上一条款说的auto_ptr和tr1::share_ptr适合于heap-based的资源,然而并不是所有资源都是heap-based的。换句话说并不是tr1::shared_ptr 和 auto_ptr 永远适合做为资源的管理者。所以有时难免还是需要实现自己的资源管理类型。
假设Mutex类型通过lock和unlock两组函数进行互斥器的锁定和解锁,可能我们希望和auto_ptr一样...
分类:
编程语言 时间:
2014-06-19 10:22:06
阅读次数:
302
(一)
看下面这个例子:
class Date {
public:
Date(int month, int day, int year);
};
很有可能引起下面这两个错误:
(1)他们也许会以错误的次序传递参数,如:Date d(30, 3, 1995);
(2)他们可能传递一个无效的月份或天数,如:Date d(2, 30, 1995); 许多像这类客户端错误。...
分类:
编程语言 时间:
2014-06-19 09:50:17
阅读次数:
249
(一)
下面代码:
tr1::shared_ptr pInv(createInvestment());
int daysHeld(const Investment* pi);
我们要调用daysHeld函数的话,就必须传递一个Investment指针,但是我们现在只有pInv对象,所以我们需要一个函数可将RAII class(本例为tr1::shared_ptr)对象转换为其所内含之原始资...
分类:
编程语言 时间:
2014-06-16 11:55:57
阅读次数:
250
(一)
假设有下面这两个函数:
int priority();
void processWidget(tr1::shared_ptr pw, int priority);
现在这样调用它:
processWidget(new Widget, priority());
但是!上面这种调用不能通过编译,因为tr1::shared_ptr构造函数需要一个原始指针,但是,这个构造函数是expl...
分类:
编程语言 时间:
2014-06-16 11:31:09
阅读次数:
296
在《Effective Java 2nd
Edition》中,第6条“消除过期的对象引用”提到,虽然Java有
垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池、缓存中的过期对象都有可能引发内存泄露的问题。书中还提到可以用
WeakHashMap来作为缓存的容器可以有效...
分类:
移动开发 时间:
2014-06-16 09:17:26
阅读次数:
292
条款一:指针与引用的区别指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因...
分类:
编程语言 时间:
2014-06-16 07:20:39
阅读次数:
301
一.让自己习惯C++ 条款01:视C++为一个语言联邦
为了更好的理解C++,我们将C++分解为四个主要次语言:
C。说到底C++仍是以C为基础。区块,语句,预处理器,内置数据类型,数组,指针统统来自C。Object-Oreinted
C++。这一部分是面向对象设计之古典守则在C++上的最直接实施....
分类:
编程语言 时间:
2014-06-16 06:18:05
阅读次数:
322
虽然我们已经有了测试程序,但是如何得知是否已完整测试了主程序?,透过Code
Coverage代码涵盖率,我们可以快速地得知,目前系统中,有多少程序中被测试过,不考虑成本跟投资效益比,涵盖率越高,代表系统如预期正常运作的面向也越广泛。
分类:
编程语言 时间:
2014-06-12 19:15:58
阅读次数:
403