查看单个帖子
  #2 (permalink)  
旧 2008-02-11
Elminster 的头像
Elminster Elminster 当前离线
超级版主
 
注册日期: 2002-09-09
帖子: 1,764
Elminster 正向着好的方向发展
默认 回复: 请教一下关于析构的问题……

你这个设计恐怕走偏了,类似这样的问题从本质上来说是没法避免的。比如说某个 Active 的派生类这么实现:

代码:
class VectorPrinter : public Active< string > { private: vector<string> _v; VectorPrinter(const vector<string>& v) { copy(v.begin(), v.end(), back_inserter(_v)); } virtual void activity(void) { for (vector<string>::iterator i=_v.begin(); i!=_v.end(); ++i) { cout << *i << endl; _sleep(1000); } } };
看起来没太大问题吧?但如果你构造了一个 VectorPrinter 的对象并调用了它的 activate 函数,那么在对应的线程结束之前,你绝对不能析构这个 VectorPrinter 对象,即使你的基类析构函数中调用了 join 也一样:因为运行 VectorPrinter::activity() 函数的线程需要访问 VectorPrinter 中的 _v 成员,但在调用基类析构函数执行 join 之前,派生类的析构函数已经执行了,_v 成员已经被析构了。
回复时引用此帖