chromium中使用scoped_ptr

之前也总结过chromium中scoped_ptr的用法,我又看了下代码,chromium43对scoped_ptr又做了一些修改。我再写篇博客总结一下。写博客如果像代码管理系统一样有版本号,那就可以持续对一篇博客维护更新了。 scoped_ptr顾名思义,就是作用域中的智能指针。scoped_ptr获得一个指针指向对象的管理权,然后在scoped_ptr超出自己的作用域的时候自动销毁这个对象。 比如这个类: scoped_ptr不能拷贝或者赋值,所以只能用在它的构造函数或者调用reset方法去接管一个对象的指针。 调用reset方法,scoped_ptr会销毁现有指针指向的对象,然后再管理新的对象的指针。可以用get获得对象的原始指针。 scoped_ptr可以通过release的方法返回自己管理的指针,之后自己不再管理这个指针了。这种情形下用户需要自己管理对象的生命周期,返回的指针需要用户自己管理,或者交给其他智能指针管理。 其实scoped_ptr跟c++11中的unique_ptr是非常类似的,scoped_ptr也实现了“移动但不能拷贝”的属性。你可以通过移动来转移对象,从而可以避免构造临时对象。 你可以通过Pass方法把一个scoped_ptr“转移”给另一个scoped_ptr,之前说scoped_ptr是不能拷贝或者赋值的。 get,release,Pass三者区别是: get是获得原始指针,scoped_ptr还是继续管理着指针 release是获得原始指针,scoped_ptr不再管理指针 Pass是转移指针管理权到另外一个scoped_ptr,自己不再管理指针 Pass()可以正确的处理向上的类型转换,比如: 另外scoped_ptr还支持数组: base库还提供了make_scoped_ptr的函数从原始指针中创建并返回一个scoped_ptr。 此外chromium中还有个ScopedVector。这个是对vector容器的封装,使其可以存放并管理对象指针,在ScopedVector超出作用域的时候销毁指针所指向的对象。 ... Read More | Share it now!

chromium中的智能指针scoped_ptr

scoped_ptr会管理指针,它在超出自己作用域的时候自动调用自己的析构函数去销毁指针。 scoped_ptr也可以管理数组。 把scoped_ptr当作参数或者返回值,也可以在函数中使用它。 Pass()可以正确的处理向上的类型转换,比如: 也可以使用PassAs()明确向上转换 注意,PassAs只对scoped_ptr<T>有效,不能用于scoped_ptr<T[]>。 ... Read More | Share it now!