1. 在堆中创建,传入参数指针至线程中,由线程内部释放或等待线程退出后再释放;
2. 不在堆中创建或使用全局变量;
虽然在各种书上提及这种方式的种种不足,但我一直用得还挺好.主要就是注意资源的释放就成,毕竟这种低层的API能给程序员最大的灵活性,所谓有空间才能发挥嘛.但不可否认的是,站得更高是会看得更远.一些设计确实能让代码变得更加简洁,并且不用关注太多低层的细节.其实我一直觉得细节很重要,但要会取舍.
看看以下几个类如何能让代码更优雅:
boost::shared_ptr
boost::bind
boost::thread
作为比较,以下是linux下标准的创建线程的例子:
|
如果用上shared_ptr,就不再需要在线程中来删除资源了.因为当引用计数为0时,shared_ptr会自动的销毁掉内含的指针.
|
上面的类型转换有点恶心,不过好在shared_ptr也是允许内部指针的类型继承的,好绕口.
还是看以下代码吧,B类由A类派生而来.所以boost::shared_ptr这个类型,可以传递boost::shared_ptr对象,并且由于shared_ptr重载了"->"符号,所以直接就可以访问B的成员了.
|