摘要:
1、引用计数字段不能放在资源管理类中。我们的解决办法是,把引用计数和资源绑在一起,进行二次封装。但是这样存在一个大问题,不同类型的资源管理类不能兼容。也就是说,shared_ptr不能赋值给shared_ptr。2、你可能会想,使用模版成员方法去解决,但是这里有个问题。因为进行了两次封装,u_ptr的类型还是不一样,也不能赋值。你可能会想,我在u_ptr中也建立模版成员方法,这也是错的。思考下,我们要保证,资源管理类指向同一个u_ptr,对u_ptr进行拷贝,那么资源管理类就不是指向同一个u_ptr了,这显然是错的。3、有没有其它的办法呢? 问题的关键是,进行了两次封装。不进行两次封装就好了. 阅读全文
posted @ 2014-01-17 21:22
Andy Niu
阅读(843)
评论(0)
推荐(0)
摘要:
1、shared_ptr解决什么问题? auto_ptr有个局限,拥有权转移。这往往不符合我们的需求,有时候我们期望,多个资源管理对象可以共享一个资源,当引用计数为0的时候,执行delete。shared_ptr就是为了解决这个问题。2、shared_ptr怎么解决这个问题?和auto_ptr类似,除此之外,还有几点需要注意:3、增加一个字段为引用计数,当引用计数为0的时候,执行delete。引用计数字段不能放在资源管理类中,为什么? 假设放到资源管理类中,每个资源管理对象都有一个refCount字段,共享一个资源的资源管理对象的refCount取值一样,但是怎么保持一致呢?因为这些对象之.. 阅读全文
posted @ 2014-01-17 19:05
Andy Niu
阅读(1751)
评论(0)
推荐(0)
摘要:
1、auto_ptr解决什么问题? 在堆上获取的资源,客户可能会忘记delete,或者由于异常没有执行到delete,导致资源泄漏。在栈上分配的对象,有个特点,不论出现什么情况,超出作用域后,都将调用析构方法。根据这个特点,可以使用栈上的对象管理指针,析构的时候执行delete,确保一定释放资源。2、auto_ptr就是解决这个问题的,auto_ptr就是个资源管理类,它的特点是拥有权转移。3、考虑,如果让我来设计auto_ptr,我该怎么做? auto_ptr是个资源管理类,对指针封装。有几点需要注意: a、可以对不同类型的指针进行封装,因此需要一个模板类。 b、copy构造,cop... 阅读全文
posted @ 2014-01-17 18:40
Andy Niu
阅读(835)
评论(0)
推荐(0)
浙公网安备 33010602011771号