effectiveC++(十四)(四)

2010-12-26 23:10:54 · 作者: · 浏览: 4271
很好的准则,大多数情况都适用。但不幸的是,当类里没有虚函数的时候,也会带来非虚析构函数问题。 例如,条款13里有个实现用户自定义数组下标上下限的类模板。假设你(不顾条款m33的建议)决定写一个派生类模板来表示某种可以命名的数组(即每个数组有一个名字)。

template                // 基类模板
class array {                    // (来自条款13)
public:
  array(int lowbound, int highbound);
  ~array();

private:
  vector data;
  size_t size;
  int lbound, hbound;
};

template
class namedarray: public array {
public:
  namedarray(int lowbound, int highbound, const string& name);
  ...

private:
  string arrayname;
};

如果在应用程序的某个地方你将指向namedarray类型的指针转换成了array类型的指针,然后用delete来删除array指针,那你就会立即掉进“不确定行为”的陷阱中。

namedarray *pna =
  new namedarray(10, 20, "impending doom");

array *pa;

...


pa = pna;                // namedarray* -> array*

...

delete pa;